You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
//This file contains the ES6 extensions to the core Promises/A+ API
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
var TRUE = valuePromise(true); var FALSE = valuePromise(false); var NULL = valuePromise(null); var UNDEFINED = valuePromise(undefined); var ZERO = valuePromise(0); var EMPTYSTRING = valuePromise('');
function valuePromise(value) { var p = new Promise(Promise._0); p._V = 1; p._W = value; return p; } Promise.resolve = function (value) { if (value instanceof Promise) return value;
if (value === null) return NULL; if (value === undefined) return UNDEFINED; if (value === true) return TRUE; if (value === false) return FALSE; if (value === 0) return ZERO; if (value === '') return EMPTYSTRING;
if (typeof value === 'object' || typeof value === 'function') { try { var then = value.then; if (typeof then === 'function') { return new Promise(then.bind(value)); } } catch (ex) { return new Promise(function (resolve, reject) { reject(ex); }); } } return valuePromise(value); };
var iterableToArray = function (iterable) { if (typeof Array.from === 'function') { // ES2015+, iterables exist
iterableToArray = Array.from; return Array.from(iterable); }
// ES5, only arrays and array-likes exist
iterableToArray = function (x) { return Array.prototype.slice.call(x); }; return Array.prototype.slice.call(iterable); }
Promise.all = function (arr) { var args = iterableToArray(arr);
return new Promise(function (resolve, reject) { if (args.length === 0) return resolve([]); var remaining = args.length; function res(i, val) { if (val && (typeof val === 'object' || typeof val === 'function')) { if (val instanceof Promise && val.then === Promise.prototype.then) { while (val._V === 3) { val = val._W; } if (val._V === 1) return res(i, val._W); if (val._V === 2) reject(val._W); val.then(function (val) { res(i, val); }, reject); return; } else { var then = val.then; if (typeof then === 'function') { var p = new Promise(then.bind(val)); p.then(function (val) { res(i, val); }, reject); return; } } } args[i] = val; if (--remaining === 0) { resolve(args); } } for (var i = 0; i < args.length; i++) { res(i, args[i]); } }); };
Promise.reject = function (value) { return new Promise(function (resolve, reject) { reject(value); }); };
Promise.race = function (values) { return new Promise(function (resolve, reject) { iterableToArray(values).forEach(function(value){ Promise.resolve(value).then(resolve, reject); }); }); };
/* Prototype Methods */
Promise.prototype['catch'] = function (onRejected) { return this.then(null, onRejected); };
|