diff options
Diffstat (limited to 'catapult/third_party/polymer/components/promise-polyfill/Promise-Statics.js')
-rw-r--r-- | catapult/third_party/polymer/components/promise-polyfill/Promise-Statics.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/promise-polyfill/Promise-Statics.js b/catapult/third_party/polymer/components/promise-polyfill/Promise-Statics.js new file mode 100644 index 00000000..49eeb8b3 --- /dev/null +++ b/catapult/third_party/polymer/components/promise-polyfill/Promise-Statics.js @@ -0,0 +1,49 @@ +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ +Promise.all = Promise.all || function () { + var args = Array.prototype.slice.call(arguments.length === 1 && Array.isArray(arguments[0]) ? arguments[0] : arguments); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + function res(i, val) { + try { + if (val && (typeof val === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { res(i, val) }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.race = Promise.race || function(values) { + // TODO(bradfordcsmith): To be consistent with the ECMAScript spec, this + // method should take any iterable, not just an array. + var forcedArray = /** @type {!Array<!Thenable>} */ (values); + return new Promise(function (resolve, reject) { + for(var i = 0, len = forcedArray.length; i < len; i++) { + forcedArray[i].then(resolve, reject); + } + }); +}; + |