1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/deprecated-sync-thenables.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,119 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +/** 1.9 + * THIS MODULE IS DEPRECATED. IMPORT "Promise.jsm" INSTEAD. 1.10 + */ 1.11 + 1.12 +"use strict"; 1.13 + 1.14 +this.Promise = {}; 1.15 + 1.16 +if (typeof(require) === "function") { 1.17 + module.exports = Promise; 1.18 +} else { 1.19 + this.EXPORTED_SYMBOLS = ["Promise"]; 1.20 +} 1.21 + 1.22 +function fulfilled(value) { 1.23 + return { then: function then(fulfill) { fulfill(value); } }; 1.24 +} 1.25 + 1.26 +function rejected(reason) { 1.27 + return { then: function then(fulfill, reject) { reject(reason); } }; 1.28 +} 1.29 + 1.30 +function isPromise(value) { 1.31 + return value && typeof(value.then) === 'function'; 1.32 +} 1.33 + 1.34 +function defer() { 1.35 + var observers = []; 1.36 + var result = null; 1.37 + var promise = { 1.38 + then: function then(onFulfill, onError) { 1.39 + var deferred = defer(); 1.40 + 1.41 + function resolve(value) { 1.42 + try { 1.43 + deferred.resolve(onFulfill ? onFulfill(value) : value); 1.44 + } catch (error) { 1.45 + deferred.resolve(rejected(error)); 1.46 + } 1.47 + } 1.48 + 1.49 + function reject(reason) { 1.50 + try { 1.51 + if (onError) deferred.resolve(onError(reason)); 1.52 + else deferred.resolve(rejected(reason)); 1.53 + } catch (error) { 1.54 + deferred.resolve(rejected(error)); 1.55 + } 1.56 + } 1.57 + 1.58 + if (observers) { 1.59 + observers.push({ resolve: resolve, reject: reject }); 1.60 + } else { 1.61 + result.then(resolve, reject); 1.62 + } 1.63 + 1.64 + return deferred.promise; 1.65 + } 1.66 + }; 1.67 + 1.68 + var deferred = { 1.69 + promise: promise, 1.70 + resolve: function resolve(value) { 1.71 + if (!result) { 1.72 + result = isPromise(value) ? value : fulfilled(value); 1.73 + while (observers.length) { 1.74 + var observer = observers.shift(); 1.75 + result.then(observer.resolve, observer.reject); 1.76 + } 1.77 + observers = null; 1.78 + } 1.79 + }, 1.80 + reject: function reject(reason) { 1.81 + deferred.resolve(rejected(reason)); 1.82 + } 1.83 + }; 1.84 + 1.85 + return deferred; 1.86 +} 1.87 +Promise.defer = defer; 1.88 + 1.89 +function resolve(value) { 1.90 + var deferred = defer(); 1.91 + deferred.resolve(value); 1.92 + return deferred.promise; 1.93 +} 1.94 +Promise.resolve = resolve; 1.95 + 1.96 +function reject(reason) { 1.97 + var deferred = defer(); 1.98 + deferred.reject(reason); 1.99 + return deferred.promise; 1.100 +} 1.101 +Promise.reject = reject; 1.102 + 1.103 +var promised = (function() { 1.104 + var call = Function.call; 1.105 + var concat = Array.prototype.concat; 1.106 + function execute(args) { return call.apply(call, args) } 1.107 + function promisedConcat(promises, unknown) { 1.108 + return promises.then(function(values) { 1.109 + return resolve(unknown).then(function(value) { 1.110 + return values.concat([ value ]); 1.111 + }); 1.112 + }); 1.113 + } 1.114 + return function promised(f) { 1.115 + return function promised() { 1.116 + return concat.apply([ f, this ], arguments). 1.117 + reduce(promisedConcat, resolve([])). 1.118 + then(execute); 1.119 + }; 1.120 + } 1.121 +})(); 1.122 +Promise.all = promised(Array);