Wed, 31 Dec 2014 13:27:57 +0100
Ignore runtime configuration files generated during quality assurance.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /**
6 * THIS MODULE IS DEPRECATED. IMPORT "Promise.jsm" INSTEAD.
7 */
9 "use strict";
11 this.Promise = {};
13 if (typeof(require) === "function") {
14 module.exports = Promise;
15 } else {
16 this.EXPORTED_SYMBOLS = ["Promise"];
17 }
19 function fulfilled(value) {
20 return { then: function then(fulfill) { fulfill(value); } };
21 }
23 function rejected(reason) {
24 return { then: function then(fulfill, reject) { reject(reason); } };
25 }
27 function isPromise(value) {
28 return value && typeof(value.then) === 'function';
29 }
31 function defer() {
32 var observers = [];
33 var result = null;
34 var promise = {
35 then: function then(onFulfill, onError) {
36 var deferred = defer();
38 function resolve(value) {
39 try {
40 deferred.resolve(onFulfill ? onFulfill(value) : value);
41 } catch (error) {
42 deferred.resolve(rejected(error));
43 }
44 }
46 function reject(reason) {
47 try {
48 if (onError) deferred.resolve(onError(reason));
49 else deferred.resolve(rejected(reason));
50 } catch (error) {
51 deferred.resolve(rejected(error));
52 }
53 }
55 if (observers) {
56 observers.push({ resolve: resolve, reject: reject });
57 } else {
58 result.then(resolve, reject);
59 }
61 return deferred.promise;
62 }
63 };
65 var deferred = {
66 promise: promise,
67 resolve: function resolve(value) {
68 if (!result) {
69 result = isPromise(value) ? value : fulfilled(value);
70 while (observers.length) {
71 var observer = observers.shift();
72 result.then(observer.resolve, observer.reject);
73 }
74 observers = null;
75 }
76 },
77 reject: function reject(reason) {
78 deferred.resolve(rejected(reason));
79 }
80 };
82 return deferred;
83 }
84 Promise.defer = defer;
86 function resolve(value) {
87 var deferred = defer();
88 deferred.resolve(value);
89 return deferred.promise;
90 }
91 Promise.resolve = resolve;
93 function reject(reason) {
94 var deferred = defer();
95 deferred.reject(reason);
96 return deferred.promise;
97 }
98 Promise.reject = reject;
100 var promised = (function() {
101 var call = Function.call;
102 var concat = Array.prototype.concat;
103 function execute(args) { return call.apply(call, args) }
104 function promisedConcat(promises, unknown) {
105 return promises.then(function(values) {
106 return resolve(unknown).then(function(value) {
107 return values.concat([ value ]);
108 });
109 });
110 }
111 return function promised(f) {
112 return function promised() {
113 return concat.apply([ f, this ], arguments).
114 reduce(promisedConcat, resolve([])).
115 then(execute);
116 };
117 }
118 })();
119 Promise.all = promised(Array);