diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /devtools/shared/deprecated-sync-thenables.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/shared/deprecated-sync-thenables.js')
-rw-r--r-- | devtools/shared/deprecated-sync-thenables.js | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/devtools/shared/deprecated-sync-thenables.js b/devtools/shared/deprecated-sync-thenables.js new file mode 100644 index 000000000..52bf671cd --- /dev/null +++ b/devtools/shared/deprecated-sync-thenables.js @@ -0,0 +1,119 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * THIS MODULE IS DEPRECATED. IMPORT "Promise.jsm" INSTEAD. + */ + +"use strict"; + +this.Promise = {}; + +if (typeof (require) === "function") { + module.exports = Promise; +} else { + this.EXPORTED_SYMBOLS = ["Promise"]; +} + +function fulfilled(value) { + return { then: function then(fulfill) { fulfill(value); } }; +} + +function rejected(reason) { + return { then: function then(fulfill, reject) { reject(reason); } }; +} + +function isPromise(value) { + return value && typeof (value.then) === "function"; +} + +function defer() { + var observers = []; + var result = null; + var promise = { + then: function then(onFulfill, onError) { + var deferred = defer(); + + function resolve(value) { + try { + deferred.resolve(onFulfill ? onFulfill(value) : value); + } catch (error) { + deferred.resolve(rejected(error)); + } + } + + function reject(reason) { + try { + if (onError) deferred.resolve(onError(reason)); + else deferred.resolve(rejected(reason)); + } catch (error) { + deferred.resolve(rejected(error)); + } + } + + if (observers) { + observers.push({ resolve: resolve, reject: reject }); + } else { + result.then(resolve, reject); + } + + return deferred.promise; + } + }; + + var deferred = { + promise: promise, + resolve: function resolve(value) { + if (!result) { + result = isPromise(value) ? value : fulfilled(value); + while (observers.length) { + var observer = observers.shift(); + result.then(observer.resolve, observer.reject); + } + observers = null; + } + }, + reject: function reject(reason) { + deferred.resolve(rejected(reason)); + } + }; + + return deferred; +} +Promise.defer = defer; + +function resolve(value) { + var deferred = defer(); + deferred.resolve(value); + return deferred.promise; +} +Promise.resolve = resolve; + +function reject(reason) { + var deferred = defer(); + deferred.reject(reason); + return deferred.promise; +} +Promise.reject = reject; + +var promised = (function () { + var call = Function.call; + var concat = Array.prototype.concat; + function execute(args) { return call.apply(call, args); } + function promisedConcat(promises, unknown) { + return promises.then(function (values) { + return resolve(unknown).then(function (value) { + return values.concat([ value ]); + }); + }); + } + return function promised(f) { + return function promised() { + return concat.apply([ f, this ], arguments). + reduce(promisedConcat, resolve([])). + then(execute); + }; + }; +})(); +Promise.all = promised(Array); |