es6-promise
Advanced tools
Comparing version 4.1.1 to 4.2.0
@@ -6,3 +6,3 @@ /*! | ||
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE | ||
* @version 4.1.1 | ||
* @version v4.2.0+b87f2403 | ||
*/ | ||
@@ -25,3 +25,5 @@ | ||
var _isArray = undefined; | ||
var _isArray = void 0; | ||
if (Array.isArray) { | ||
@@ -38,4 +40,4 @@ _isArray = Array.isArray; | ||
var len = 0; | ||
var vertxNext = undefined; | ||
var customSchedulerFn = undefined; | ||
var vertxNext = void 0; | ||
var customSchedulerFn = void 0; | ||
@@ -69,3 +71,3 @@ var asap = function asap(callback, arg) { | ||
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; | ||
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; | ||
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; | ||
@@ -150,3 +152,3 @@ // test for web worker but not in IE10 | ||
var scheduleFlush = undefined; | ||
var scheduleFlush = void 0; | ||
// Decide what async method to use to triggering processing of queued callbacks: | ||
@@ -166,4 +168,2 @@ if (isNode) { | ||
function then(onFulfillment, onRejection) { | ||
var _arguments = arguments; | ||
var parent = this; | ||
@@ -179,9 +179,8 @@ | ||
if (_state) { | ||
(function () { | ||
var callback = _arguments[_state - 1]; | ||
asap(function () { | ||
return invokeCallback(_state, child, callback, parent._result); | ||
}); | ||
})(); | ||
var callback = arguments[_state - 1]; | ||
asap(function () { | ||
return invokeCallback(_state, child, callback, parent._result); | ||
}); | ||
} else { | ||
@@ -378,2 +377,3 @@ subscribe(parent, child, onFulfillment, onRejection); | ||
parent._onerror = null; | ||
@@ -398,4 +398,4 @@ | ||
var child = undefined, | ||
callback = undefined, | ||
var child = void 0, | ||
callback = void 0, | ||
detail = promise._result; | ||
@@ -434,6 +434,6 @@ | ||
var hasCallback = isFunction(callback), | ||
value = undefined, | ||
error = undefined, | ||
succeeded = undefined, | ||
failed = undefined; | ||
value = void 0, | ||
error = void 0, | ||
succeeded = void 0, | ||
failed = void 0; | ||
@@ -463,10 +463,10 @@ if (hasCallback) { | ||
} else if (hasCallback && succeeded) { | ||
resolve(promise, value); | ||
} else if (failed) { | ||
reject(promise, error); | ||
} else if (settled === FULFILLED) { | ||
fulfill(promise, value); | ||
} else if (settled === REJECTED) { | ||
reject(promise, value); | ||
} | ||
resolve(promise, value); | ||
} else if (failed) { | ||
reject(promise, error); | ||
} else if (settled === FULFILLED) { | ||
fulfill(promise, value); | ||
} else if (settled === REJECTED) { | ||
reject(promise, value); | ||
} | ||
} | ||
@@ -498,94 +498,104 @@ | ||
function Enumerator$1(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
var Enumerator = function () { | ||
function Enumerator(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
this._result = new Array(this.length); | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
this._result = new Array(this.length); | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
fulfill(this.promise, this._result); | ||
} | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
Enumerator.prototype._enumerate = function _enumerate(input) { | ||
for (var i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
} | ||
}; | ||
Enumerator$1.prototype._enumerate = function (input) { | ||
for (var i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
} | ||
}; | ||
Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { | ||
var c = this._instanceConstructor; | ||
var resolve$$1 = c.resolve; | ||
Enumerator$1.prototype._eachEntry = function (entry, i) { | ||
var c = this._instanceConstructor; | ||
var resolve$$1 = c.resolve; | ||
if (resolve$$1 === resolve$1) { | ||
var _then = getThen(entry); | ||
if (resolve$$1 === resolve$1) { | ||
var _then = getThen(entry); | ||
if (_then === then && entry._state !== PENDING) { | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof _then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise$3) { | ||
var promise = new c(noop); | ||
handleMaybeThenable(promise, entry, _then); | ||
this._willSettleAt(promise, i); | ||
if (_then === then && entry._state !== PENDING) { | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof _then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise$2) { | ||
var promise = new c(noop); | ||
handleMaybeThenable(promise, entry, _then); | ||
this._willSettleAt(promise, i); | ||
} else { | ||
this._willSettleAt(new c(function (resolve$$1) { | ||
return resolve$$1(entry); | ||
}), i); | ||
} | ||
} else { | ||
this._willSettleAt(new c(function (resolve$$1) { | ||
return resolve$$1(entry); | ||
}), i); | ||
this._willSettleAt(resolve$$1(entry), i); | ||
} | ||
} else { | ||
this._willSettleAt(resolve$$1(entry), i); | ||
} | ||
}; | ||
}; | ||
Enumerator$1.prototype._settledAt = function (state, i, value) { | ||
var promise = this.promise; | ||
Enumerator.prototype._settledAt = function _settledAt(state, i, value) { | ||
var promise = this.promise; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
} | ||
} | ||
} | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
} | ||
}; | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
} | ||
}; | ||
Enumerator$1.prototype._willSettleAt = function (promise, i) { | ||
var enumerator = this; | ||
Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { | ||
var enumerator = this; | ||
subscribe(promise, undefined, function (value) { | ||
return enumerator._settledAt(FULFILLED, i, value); | ||
}, function (reason) { | ||
return enumerator._settledAt(REJECTED, i, reason); | ||
}); | ||
}; | ||
subscribe(promise, undefined, function (value) { | ||
return enumerator._settledAt(FULFILLED, i, value); | ||
}, function (reason) { | ||
return enumerator._settledAt(REJECTED, i, reason); | ||
}); | ||
}; | ||
return Enumerator; | ||
}(); | ||
/** | ||
@@ -638,4 +648,4 @@ `Promise.all` accepts an array of promises, and returns a new promise which | ||
*/ | ||
function all$1(entries) { | ||
return new Enumerator$1(this, entries).promise; | ||
function all(entries) { | ||
return new Enumerator(this, entries).promise; | ||
} | ||
@@ -708,3 +718,3 @@ | ||
*/ | ||
function race$1(entries) { | ||
function race(entries) { | ||
/*jshint validthis:true */ | ||
@@ -876,258 +886,279 @@ var Constructor = this; | ||
@class Promise | ||
@param {function} resolver | ||
@param {Function} resolver | ||
Useful for tooling. | ||
@constructor | ||
*/ | ||
function Promise$3(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise$3 ? initializePromise(this, resolver) : needsNew(); | ||
var Promise$2 = function () { | ||
function Promise(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise ? initializePromise(this, resolver) : needsNew(); | ||
} | ||
} | ||
} | ||
Promise$3.all = all$1; | ||
Promise$3.race = race$1; | ||
Promise$3.resolve = resolve$1; | ||
Promise$3.reject = reject$1; | ||
Promise$3._setScheduler = setScheduler; | ||
Promise$3._setAsap = setAsap; | ||
Promise$3._asap = asap; | ||
Promise$3.prototype = { | ||
constructor: Promise$3, | ||
/** | ||
The primary way of interacting with a promise is through its `then` method, | ||
which registers callbacks to receive either a promise's eventual value or the | ||
reason why the promise cannot be fulfilled. | ||
```js | ||
findUser().then(function(user){ | ||
// user is available | ||
}, function(reason){ | ||
// user is unavailable, and you are given the reason why | ||
}); | ||
``` | ||
Chaining | ||
-------- | ||
The return value of `then` is itself a promise. This second, 'downstream' | ||
promise is resolved with the return value of the first promise's fulfillment | ||
or rejection handler, or rejected if the handler throws an exception. | ||
```js | ||
findUser().then(function (user) { | ||
return user.name; | ||
}, function (reason) { | ||
return 'default name'; | ||
}).then(function (userName) { | ||
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it | ||
// will be `'default name'` | ||
}); | ||
findUser().then(function (user) { | ||
throw new Error('Found user, but still unhappy'); | ||
}, function (reason) { | ||
throw new Error('`findUser` rejected and we're unhappy'); | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. | ||
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. | ||
}); | ||
``` | ||
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. | ||
```js | ||
findUser().then(function (user) { | ||
throw new PedagogicalException('Upstream error'); | ||
}).then(function (value) { | ||
// never reached | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// The `PedgagocialException` is propagated all the way down to here | ||
}); | ||
``` | ||
Assimilation | ||
------------ | ||
Sometimes the value you want to propagate to a downstream promise can only be | ||
retrieved asynchronously. This can be achieved by returning a promise in the | ||
fulfillment or rejection handler. The downstream promise will then be pending | ||
until the returned promise is settled. This is called *assimilation*. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// The user's comments are now available | ||
}); | ||
``` | ||
If the assimliated promise rejects, then the downstream promise will also reject. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// If `findCommentsByAuthor` fulfills, we'll have the value here | ||
}, function (reason) { | ||
// If `findCommentsByAuthor` rejects, we'll have the reason here | ||
}); | ||
``` | ||
Simple Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let result; | ||
try { | ||
result = findResult(); | ||
The primary way of interacting with a promise is through its `then` method, | ||
which registers callbacks to receive either a promise's eventual value or the | ||
reason why the promise cannot be fulfilled. | ||
```js | ||
findUser().then(function(user){ | ||
// user is available | ||
}, function(reason){ | ||
// user is unavailable, and you are given the reason why | ||
}); | ||
``` | ||
Chaining | ||
-------- | ||
The return value of `then` is itself a promise. This second, 'downstream' | ||
promise is resolved with the return value of the first promise's fulfillment | ||
or rejection handler, or rejected if the handler throws an exception. | ||
```js | ||
findUser().then(function (user) { | ||
return user.name; | ||
}, function (reason) { | ||
return 'default name'; | ||
}).then(function (userName) { | ||
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it | ||
// will be `'default name'` | ||
}); | ||
findUser().then(function (user) { | ||
throw new Error('Found user, but still unhappy'); | ||
}, function (reason) { | ||
throw new Error('`findUser` rejected and we're unhappy'); | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. | ||
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. | ||
}); | ||
``` | ||
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. | ||
```js | ||
findUser().then(function (user) { | ||
throw new PedagogicalException('Upstream error'); | ||
}).then(function (value) { | ||
// never reached | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// The `PedgagocialException` is propagated all the way down to here | ||
}); | ||
``` | ||
Assimilation | ||
------------ | ||
Sometimes the value you want to propagate to a downstream promise can only be | ||
retrieved asynchronously. This can be achieved by returning a promise in the | ||
fulfillment or rejection handler. The downstream promise will then be pending | ||
until the returned promise is settled. This is called *assimilation*. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// The user's comments are now available | ||
}); | ||
``` | ||
If the assimliated promise rejects, then the downstream promise will also reject. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// If `findCommentsByAuthor` fulfills, we'll have the value here | ||
}, function (reason) { | ||
// If `findCommentsByAuthor` rejects, we'll have the reason here | ||
}); | ||
``` | ||
Simple Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let result; | ||
try { | ||
result = findResult(); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
findResult(function(result, err){ | ||
if (err) { | ||
// failure | ||
} else { | ||
// success | ||
} catch(reason) { | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findResult().then(function(result){ | ||
// success | ||
}, function(reason){ | ||
// failure | ||
}); | ||
``` | ||
Advanced Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let author, books; | ||
try { | ||
author = findAuthor(); | ||
books = findBooksByAuthor(author); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
function foundBooks(books) { | ||
} | ||
function failure(reason) { | ||
} | ||
findAuthor(function(author, err){ | ||
if (err) { | ||
failure(err); | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
findResult(function(result, err){ | ||
if (err) { | ||
// failure | ||
} else { | ||
// success | ||
} else { | ||
try { | ||
findBoooksByAuthor(author, function(books, err) { | ||
if (err) { | ||
failure(err); | ||
} else { | ||
try { | ||
foundBooks(books); | ||
} catch(reason) { | ||
failure(reason); | ||
} | ||
} | ||
}); | ||
} catch(error) { | ||
failure(err); | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findResult().then(function(result){ | ||
// success | ||
}, function(reason){ | ||
// failure | ||
}); | ||
``` | ||
Advanced Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let author, books; | ||
try { | ||
author = findAuthor(); | ||
books = findBooksByAuthor(author); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findAuthor(). | ||
then(findBooksByAuthor). | ||
then(function(books){ | ||
// found books | ||
}).catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method then | ||
@param {Function} onFulfilled | ||
@param {Function} onRejected | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
/** | ||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | ||
as the catch block of a try/catch statement. | ||
```js | ||
function findAuthor(){ | ||
throw new Error('couldn't find that author'); | ||
} | ||
// synchronous | ||
try { | ||
findAuthor(); | ||
} catch(reason) { | ||
// something went wrong | ||
} | ||
// async with promises | ||
findAuthor().catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method catch | ||
@param {Function} onRejection | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
Promise.prototype.catch = function _catch(onRejection) { | ||
return this.then(null, onRejection); | ||
}; | ||
/** | ||
`finally` will be invoked regardless of the promise's fate just as native | ||
try/catch/finally behaves | ||
Errback Example | ||
Synchronous example: | ||
```js | ||
function foundBooks(books) { | ||
findAuthor() { | ||
if (Math.random() > 0.5) { | ||
throw new Error(); | ||
} | ||
return new Author(); | ||
} | ||
function failure(reason) { | ||
try { | ||
return findAuthor(); // succeed or fail | ||
} catch(error) { | ||
return findOtherAuther(); | ||
} finally { | ||
// always runs | ||
// doesn't affect the return value | ||
} | ||
findAuthor(function(author, err){ | ||
if (err) { | ||
failure(err); | ||
// failure | ||
} else { | ||
try { | ||
findBoooksByAuthor(author, function(books, err) { | ||
if (err) { | ||
failure(err); | ||
} else { | ||
try { | ||
foundBooks(books); | ||
} catch(reason) { | ||
failure(reason); | ||
} | ||
} | ||
}); | ||
} catch(error) { | ||
failure(err); | ||
} | ||
// success | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
Asynchronous example: | ||
```javascript | ||
findAuthor(). | ||
then(findBooksByAuthor). | ||
then(function(books){ | ||
// found books | ||
}).catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method then | ||
@param {Function} onFulfilled | ||
@param {Function} onRejected | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
then: then, | ||
/** | ||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | ||
as the catch block of a try/catch statement. | ||
```js | ||
function findAuthor(){ | ||
throw new Error('couldn't find that author'); | ||
} | ||
// synchronous | ||
try { | ||
findAuthor(); | ||
} catch(reason) { | ||
// something went wrong | ||
} | ||
// async with promises | ||
findAuthor().catch(function(reason){ | ||
// something went wrong | ||
return findOtherAuther(); | ||
}).finally(function(){ | ||
// author was either found, or not | ||
}); | ||
``` | ||
@method catch | ||
@param {Function} onRejection | ||
Useful for tooling. | ||
@method finally | ||
@param {Function} callback | ||
@return {Promise} | ||
*/ | ||
'catch': function _catch(onRejection) { | ||
return this.then(null, onRejection); | ||
} | ||
}; | ||
Promise.prototype.finally = function _finally(callback) { | ||
var promise = this; | ||
var constructor = promise.constructor; | ||
return promise.then(function (value) { | ||
return constructor.resolve(callback()).then(function () { | ||
return value; | ||
}); | ||
}, function (reason) { | ||
return constructor.resolve(callback()).then(function () { | ||
throw reason; | ||
}); | ||
}); | ||
}; | ||
return Promise; | ||
}(); | ||
Promise$2.prototype.then = then; | ||
Promise$2.all = all; | ||
Promise$2.race = race; | ||
Promise$2.resolve = resolve$1; | ||
Promise$2.reject = reject$1; | ||
Promise$2._setScheduler = setScheduler; | ||
Promise$2._setAsap = setAsap; | ||
Promise$2._asap = asap; | ||
/*global self*/ | ||
function polyfill$1() { | ||
var local = undefined; | ||
function polyfill() { | ||
var local = void 0; | ||
@@ -1161,15 +1192,17 @@ if (typeof global !== 'undefined') { | ||
local.Promise = Promise$3; | ||
local.Promise = Promise$2; | ||
} | ||
// Strange compat.. | ||
Promise$3.polyfill = polyfill$1; | ||
Promise$3.Promise = Promise$3; | ||
Promise$2.polyfill = polyfill; | ||
Promise$2.Promise = Promise$2; | ||
Promise$3.polyfill(); | ||
Promise$2.polyfill(); | ||
return Promise$3; | ||
return Promise$2; | ||
}))); | ||
//# sourceMappingURL=es6-promise.auto.map |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){I=t}function r(t){J=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof H?function(){H(a)}:c()}function s(){var t=0,e=new V(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t<G;t+=2){var e=$[t],n=$[t+1];e(n),$[t]=void 0,$[t+1]=void 0}G=0}function f(){try{var t=require,e=t("vertx");return H=e.runOnLoop||e.runOnContext,i()}catch(n){return c()}}function l(t,e){var n=arguments,r=this,o=new this.constructor(p);void 0===o[et]&&k(o);var i=r._state;return i?!function(){var t=n[i-1];J(function(){return x(i,o,t,r._result)})}():E(r,o,t,e),o}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return g(n,t),n}function p(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function _(t){try{return t.then}catch(e){return it.error=e,it}}function y(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function m(t,e,n){J(function(t){var r=!1,o=y(n,e,function(n){r||(r=!0,e!==n?g(t,n):S(t,n))},function(e){r||(r=!0,j(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,j(t,o))},t)}function b(t,e){e._state===rt?S(t,e._result):e._state===ot?j(t,e._result):E(e,void 0,function(e){return g(t,e)},function(e){return j(t,e)})}function w(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.resolve===h?b(t,n):r===it?(j(t,it.error),it.error=null):void 0===r?S(t,n):e(r)?m(t,n,r):S(t,n)}function g(e,n){e===n?j(e,v()):t(n)?w(e,n,_(n)):S(e,n)}function A(t){t._onerror&&t._onerror(t._result),T(t)}function S(t,e){t._state===nt&&(t._result=e,t._state=rt,0!==t._subscribers.length&&J(T,t))}function j(t,e){t._state===nt&&(t._state=ot,t._result=e,J(A,t))}function E(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+rt]=n,o[i+ot]=r,0===i&&t._state&&J(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?x(n,r,o,i):o(i);t._subscribers.length=0}}function M(){this.error=null}function P(t,e){try{return t(e)}catch(n){return st.error=n,st}}function x(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=void 0,a=void 0;if(i){if(s=P(r,o),s===st?(a=!0,u=s.error,s.error=null):c=!0,n===s)return void j(n,d())}else s=o,c=!0;n._state!==nt||(i&&c?g(n,s):a?j(n,u):t===rt?S(n,s):t===ot&&j(n,s))}function C(t,e){try{e(function(e){g(t,e)},function(e){j(t,e)})}catch(n){j(t,n)}}function O(){return ut++}function k(t){t[et]=ut++,t._state=void 0,t._result=void 0,t._subscribers=[]}function Y(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[et]||k(this.promise),B(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):j(this.promise,q())}function q(){return new Error("Array Methods must be provided an Array")}function F(t){return new Y(this,t).promise}function D(t){var e=this;return new e(B(t)?function(n,r){for(var o=t.length,i=0;i<o;i++)e.resolve(t[i]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function K(t){var e=this,n=new e(p);return j(n,t),n}function L(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function N(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(t){this[et]=O(),this._result=this._state=void 0,this._subscribers=[],p!==t&&("function"!=typeof t&&L(),this instanceof U?C(this,t):N())}function W(){var t=void 0;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if("[object Promise]"===r&&!n.cast)return}t.Promise=U}var z=void 0;z=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var B=z,G=0,H=void 0,I=void 0,J=function(t,e){$[G]=t,$[G+1]=e,G+=2,2===G&&(I?I(a):tt())},Q="undefined"!=typeof window?window:void 0,R=Q||{},V=R.MutationObserver||R.WebKitMutationObserver,X="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Z="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,$=new Array(1e3),tt=void 0;tt=X?o():V?s():Z?u():void 0===Q&&"function"==typeof require?f():c();var et=Math.random().toString(36).substring(16),nt=void 0,rt=1,ot=2,it=new M,st=new M,ut=0;return Y.prototype._enumerate=function(t){for(var e=0;this._state===nt&&e<t.length;e++)this._eachEntry(t[e],e)},Y.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var o=_(t);if(o===l&&t._state!==nt)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===U){var i=new n(p);w(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},Y.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===nt&&(this._remaining--,t===ot?j(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},Y.prototype._willSettleAt=function(t,e){var n=this;E(t,void 0,function(t){return n._settledAt(rt,e,t)},function(t){return n._settledAt(ot,e,t)})},U.all=F,U.race=D,U.resolve=h,U.reject=K,U._setScheduler=n,U._setAsap=r,U._asap=J,U.prototype={constructor:U,then:l,"catch":function(t){return this.then(null,t)}},U.polyfill=W,U.Promise=U,U.polyfill(),U}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){G=t}function r(t){H=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof B?function(){B(a)}:c()}function s(){var t=0,e=new Q(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t<z;t+=2){var e=X[t],n=X[t+1];e(n),X[t]=void 0,X[t+1]=void 0}z=0}function f(){try{var t=require,e=t("vertx");return B=e.runOnLoop||e.runOnContext,i()}catch(n){return c()}}function l(t,e){var n=this,r=new this.constructor(p);void 0===r[$]&&k(r);var o=n._state;if(o){var i=arguments[o-1];H(function(){return x(o,r,i,n._result)})}else E(n,r,t,e);return r}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return g(n,t),n}function p(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function _(t){try{return t.then}catch(e){return rt.error=e,rt}}function y(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function m(t,e,n){H(function(t){var r=!1,o=y(n,e,function(n){r||(r=!0,e!==n?g(t,n):S(t,n))},function(e){r||(r=!0,j(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,j(t,o))},t)}function b(t,e){e._state===et?S(t,e._result):e._state===nt?j(t,e._result):E(e,void 0,function(e){return g(t,e)},function(e){return j(t,e)})}function w(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.resolve===h?b(t,n):r===rt?(j(t,rt.error),rt.error=null):void 0===r?S(t,n):e(r)?m(t,n,r):S(t,n)}function g(e,n){e===n?j(e,v()):t(n)?w(e,n,_(n)):S(e,n)}function A(t){t._onerror&&t._onerror(t._result),M(t)}function S(t,e){t._state===tt&&(t._result=e,t._state=et,0!==t._subscribers.length&&H(M,t))}function j(t,e){t._state===tt&&(t._state=nt,t._result=e,H(A,t))}function E(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+et]=n,o[i+nt]=r,0===i&&t._state&&H(M,t)}function M(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?x(n,r,o,i):o(i);t._subscribers.length=0}}function T(){this.error=null}function P(t,e){try{return t(e)}catch(n){return ot.error=n,ot}}function x(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=void 0,a=void 0;if(i){if(s=P(r,o),s===ot?(a=!0,u=s.error,s.error=null):c=!0,n===s)return void j(n,d())}else s=o,c=!0;n._state!==tt||(i&&c?g(n,s):a?j(n,u):t===et?S(n,s):t===nt&&j(n,s))}function C(t,e){try{e(function(e){g(t,e)},function(e){j(t,e)})}catch(n){j(t,n)}}function O(){return it++}function k(t){t[$]=it++,t._state=void 0,t._result=void 0,t._subscribers=[]}function Y(){return new Error("Array Methods must be provided an Array")}function Y(){return new Error("Array Methods must be provided an Array")}function q(t){return new st(this,t).promise}function F(t){var e=this;return new e(W(t)?function(n,r){for(var o=t.length,i=0;i<o;i++)e.resolve(t[i]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function D(t){var e=this,n=new e(p);return j(n,t),n}function K(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function L(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(){var t=void 0;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if("[object Promise]"===r&&!n.cast)return}t.Promise=ut}var U=void 0;U=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var W=U,z=0,B=void 0,G=void 0,H=function(t,e){X[z]=t,X[z+1]=e,z+=2,2===z&&(G?G(a):Z())},I="undefined"!=typeof window?window:void 0,J=I||{},Q=J.MutationObserver||J.WebKitMutationObserver,R="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3),Z=void 0;Z=R?o():Q?s():V?u():void 0===I&&"function"==typeof require?f():c();var $=Math.random().toString(36).substring(16),tt=void 0,et=1,nt=2,rt=new T,ot=new T,it=0,st=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[$]||k(this.promise),W(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):j(this.promise,Y())}return t.prototype._enumerate=function(t){for(var e=0;this._state===tt&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var o=_(t);if(o===l&&t._state!==tt)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===ut){var i=new n(p);w(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===tt&&(this._remaining--,t===nt?j(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;E(t,void 0,function(t){return n._settledAt(et,e,t)},function(t){return n._settledAt(nt,e,t)})},t}(),ut=function(){function t(e){this[$]=O(),this._result=this._state=void 0,this._subscribers=[],p!==e&&("function"!=typeof e&&K(),this instanceof t?C(this,e):L())}return t.prototype["catch"]=function(t){return this.then(null,t)},t.prototype["finally"]=function(t){var e=this,n=e.constructor;return e.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})})},t}();return ut.prototype.then=l,ut.all=q,ut.race=F,ut.resolve=h,ut.reject=D,ut._setScheduler=n,ut._setAsap=r,ut._asap=H,ut.polyfill=N,ut.Promise=ut,ut.polyfill(),ut}); |
@@ -6,3 +6,3 @@ /*! | ||
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE | ||
* @version 4.1.1 | ||
* @version v4.2.0+b87f2403 | ||
*/ | ||
@@ -25,3 +25,5 @@ | ||
var _isArray = undefined; | ||
var _isArray = void 0; | ||
if (Array.isArray) { | ||
@@ -38,4 +40,4 @@ _isArray = Array.isArray; | ||
var len = 0; | ||
var vertxNext = undefined; | ||
var customSchedulerFn = undefined; | ||
var vertxNext = void 0; | ||
var customSchedulerFn = void 0; | ||
@@ -69,3 +71,3 @@ var asap = function asap(callback, arg) { | ||
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; | ||
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; | ||
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; | ||
@@ -150,3 +152,3 @@ // test for web worker but not in IE10 | ||
var scheduleFlush = undefined; | ||
var scheduleFlush = void 0; | ||
// Decide what async method to use to triggering processing of queued callbacks: | ||
@@ -166,4 +168,2 @@ if (isNode) { | ||
function then(onFulfillment, onRejection) { | ||
var _arguments = arguments; | ||
var parent = this; | ||
@@ -179,9 +179,8 @@ | ||
if (_state) { | ||
(function () { | ||
var callback = _arguments[_state - 1]; | ||
asap(function () { | ||
return invokeCallback(_state, child, callback, parent._result); | ||
}); | ||
})(); | ||
var callback = arguments[_state - 1]; | ||
asap(function () { | ||
return invokeCallback(_state, child, callback, parent._result); | ||
}); | ||
} else { | ||
@@ -378,2 +377,3 @@ subscribe(parent, child, onFulfillment, onRejection); | ||
parent._onerror = null; | ||
@@ -398,4 +398,4 @@ | ||
var child = undefined, | ||
callback = undefined, | ||
var child = void 0, | ||
callback = void 0, | ||
detail = promise._result; | ||
@@ -434,6 +434,6 @@ | ||
var hasCallback = isFunction(callback), | ||
value = undefined, | ||
error = undefined, | ||
succeeded = undefined, | ||
failed = undefined; | ||
value = void 0, | ||
error = void 0, | ||
succeeded = void 0, | ||
failed = void 0; | ||
@@ -463,10 +463,10 @@ if (hasCallback) { | ||
} else if (hasCallback && succeeded) { | ||
resolve(promise, value); | ||
} else if (failed) { | ||
reject(promise, error); | ||
} else if (settled === FULFILLED) { | ||
fulfill(promise, value); | ||
} else if (settled === REJECTED) { | ||
reject(promise, value); | ||
} | ||
resolve(promise, value); | ||
} else if (failed) { | ||
reject(promise, error); | ||
} else if (settled === FULFILLED) { | ||
fulfill(promise, value); | ||
} else if (settled === REJECTED) { | ||
reject(promise, value); | ||
} | ||
} | ||
@@ -498,94 +498,104 @@ | ||
function Enumerator$1(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
var Enumerator = function () { | ||
function Enumerator(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
this._result = new Array(this.length); | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
this._result = new Array(this.length); | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
fulfill(this.promise, this._result); | ||
} | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
Enumerator.prototype._enumerate = function _enumerate(input) { | ||
for (var i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
} | ||
}; | ||
Enumerator$1.prototype._enumerate = function (input) { | ||
for (var i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
} | ||
}; | ||
Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { | ||
var c = this._instanceConstructor; | ||
var resolve$$1 = c.resolve; | ||
Enumerator$1.prototype._eachEntry = function (entry, i) { | ||
var c = this._instanceConstructor; | ||
var resolve$$1 = c.resolve; | ||
if (resolve$$1 === resolve$1) { | ||
var _then = getThen(entry); | ||
if (resolve$$1 === resolve$1) { | ||
var _then = getThen(entry); | ||
if (_then === then && entry._state !== PENDING) { | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof _then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise$2) { | ||
var promise = new c(noop); | ||
handleMaybeThenable(promise, entry, _then); | ||
this._willSettleAt(promise, i); | ||
if (_then === then && entry._state !== PENDING) { | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof _then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise$1) { | ||
var promise = new c(noop); | ||
handleMaybeThenable(promise, entry, _then); | ||
this._willSettleAt(promise, i); | ||
} else { | ||
this._willSettleAt(new c(function (resolve$$1) { | ||
return resolve$$1(entry); | ||
}), i); | ||
} | ||
} else { | ||
this._willSettleAt(new c(function (resolve$$1) { | ||
return resolve$$1(entry); | ||
}), i); | ||
this._willSettleAt(resolve$$1(entry), i); | ||
} | ||
} else { | ||
this._willSettleAt(resolve$$1(entry), i); | ||
} | ||
}; | ||
}; | ||
Enumerator$1.prototype._settledAt = function (state, i, value) { | ||
var promise = this.promise; | ||
Enumerator.prototype._settledAt = function _settledAt(state, i, value) { | ||
var promise = this.promise; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
} | ||
} | ||
} | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
} | ||
}; | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
} | ||
}; | ||
Enumerator$1.prototype._willSettleAt = function (promise, i) { | ||
var enumerator = this; | ||
Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { | ||
var enumerator = this; | ||
subscribe(promise, undefined, function (value) { | ||
return enumerator._settledAt(FULFILLED, i, value); | ||
}, function (reason) { | ||
return enumerator._settledAt(REJECTED, i, reason); | ||
}); | ||
}; | ||
subscribe(promise, undefined, function (value) { | ||
return enumerator._settledAt(FULFILLED, i, value); | ||
}, function (reason) { | ||
return enumerator._settledAt(REJECTED, i, reason); | ||
}); | ||
}; | ||
return Enumerator; | ||
}(); | ||
/** | ||
@@ -638,4 +648,4 @@ `Promise.all` accepts an array of promises, and returns a new promise which | ||
*/ | ||
function all$1(entries) { | ||
return new Enumerator$1(this, entries).promise; | ||
function all(entries) { | ||
return new Enumerator(this, entries).promise; | ||
} | ||
@@ -708,3 +718,3 @@ | ||
*/ | ||
function race$1(entries) { | ||
function race(entries) { | ||
/*jshint validthis:true */ | ||
@@ -876,258 +886,279 @@ var Constructor = this; | ||
@class Promise | ||
@param {function} resolver | ||
@param {Function} resolver | ||
Useful for tooling. | ||
@constructor | ||
*/ | ||
function Promise$2(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew(); | ||
var Promise$1 = function () { | ||
function Promise(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise ? initializePromise(this, resolver) : needsNew(); | ||
} | ||
} | ||
} | ||
Promise$2.all = all$1; | ||
Promise$2.race = race$1; | ||
Promise$2.resolve = resolve$1; | ||
Promise$2.reject = reject$1; | ||
Promise$2._setScheduler = setScheduler; | ||
Promise$2._setAsap = setAsap; | ||
Promise$2._asap = asap; | ||
Promise$2.prototype = { | ||
constructor: Promise$2, | ||
/** | ||
The primary way of interacting with a promise is through its `then` method, | ||
which registers callbacks to receive either a promise's eventual value or the | ||
reason why the promise cannot be fulfilled. | ||
```js | ||
findUser().then(function(user){ | ||
// user is available | ||
}, function(reason){ | ||
// user is unavailable, and you are given the reason why | ||
}); | ||
``` | ||
Chaining | ||
-------- | ||
The return value of `then` is itself a promise. This second, 'downstream' | ||
promise is resolved with the return value of the first promise's fulfillment | ||
or rejection handler, or rejected if the handler throws an exception. | ||
```js | ||
findUser().then(function (user) { | ||
return user.name; | ||
}, function (reason) { | ||
return 'default name'; | ||
}).then(function (userName) { | ||
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it | ||
// will be `'default name'` | ||
}); | ||
findUser().then(function (user) { | ||
throw new Error('Found user, but still unhappy'); | ||
}, function (reason) { | ||
throw new Error('`findUser` rejected and we're unhappy'); | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. | ||
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. | ||
}); | ||
``` | ||
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. | ||
```js | ||
findUser().then(function (user) { | ||
throw new PedagogicalException('Upstream error'); | ||
}).then(function (value) { | ||
// never reached | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// The `PedgagocialException` is propagated all the way down to here | ||
}); | ||
``` | ||
Assimilation | ||
------------ | ||
Sometimes the value you want to propagate to a downstream promise can only be | ||
retrieved asynchronously. This can be achieved by returning a promise in the | ||
fulfillment or rejection handler. The downstream promise will then be pending | ||
until the returned promise is settled. This is called *assimilation*. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// The user's comments are now available | ||
}); | ||
``` | ||
If the assimliated promise rejects, then the downstream promise will also reject. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// If `findCommentsByAuthor` fulfills, we'll have the value here | ||
}, function (reason) { | ||
// If `findCommentsByAuthor` rejects, we'll have the reason here | ||
}); | ||
``` | ||
Simple Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let result; | ||
try { | ||
result = findResult(); | ||
The primary way of interacting with a promise is through its `then` method, | ||
which registers callbacks to receive either a promise's eventual value or the | ||
reason why the promise cannot be fulfilled. | ||
```js | ||
findUser().then(function(user){ | ||
// user is available | ||
}, function(reason){ | ||
// user is unavailable, and you are given the reason why | ||
}); | ||
``` | ||
Chaining | ||
-------- | ||
The return value of `then` is itself a promise. This second, 'downstream' | ||
promise is resolved with the return value of the first promise's fulfillment | ||
or rejection handler, or rejected if the handler throws an exception. | ||
```js | ||
findUser().then(function (user) { | ||
return user.name; | ||
}, function (reason) { | ||
return 'default name'; | ||
}).then(function (userName) { | ||
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it | ||
// will be `'default name'` | ||
}); | ||
findUser().then(function (user) { | ||
throw new Error('Found user, but still unhappy'); | ||
}, function (reason) { | ||
throw new Error('`findUser` rejected and we're unhappy'); | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. | ||
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. | ||
}); | ||
``` | ||
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. | ||
```js | ||
findUser().then(function (user) { | ||
throw new PedagogicalException('Upstream error'); | ||
}).then(function (value) { | ||
// never reached | ||
}).then(function (value) { | ||
// never reached | ||
}, function (reason) { | ||
// The `PedgagocialException` is propagated all the way down to here | ||
}); | ||
``` | ||
Assimilation | ||
------------ | ||
Sometimes the value you want to propagate to a downstream promise can only be | ||
retrieved asynchronously. This can be achieved by returning a promise in the | ||
fulfillment or rejection handler. The downstream promise will then be pending | ||
until the returned promise is settled. This is called *assimilation*. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// The user's comments are now available | ||
}); | ||
``` | ||
If the assimliated promise rejects, then the downstream promise will also reject. | ||
```js | ||
findUser().then(function (user) { | ||
return findCommentsByAuthor(user); | ||
}).then(function (comments) { | ||
// If `findCommentsByAuthor` fulfills, we'll have the value here | ||
}, function (reason) { | ||
// If `findCommentsByAuthor` rejects, we'll have the reason here | ||
}); | ||
``` | ||
Simple Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let result; | ||
try { | ||
result = findResult(); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
findResult(function(result, err){ | ||
if (err) { | ||
// failure | ||
} else { | ||
// success | ||
} catch(reason) { | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findResult().then(function(result){ | ||
// success | ||
}, function(reason){ | ||
// failure | ||
}); | ||
``` | ||
Advanced Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let author, books; | ||
try { | ||
author = findAuthor(); | ||
books = findBooksByAuthor(author); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
function foundBooks(books) { | ||
} | ||
function failure(reason) { | ||
} | ||
findAuthor(function(author, err){ | ||
if (err) { | ||
failure(err); | ||
// failure | ||
} | ||
``` | ||
Errback Example | ||
```js | ||
findResult(function(result, err){ | ||
if (err) { | ||
// failure | ||
} else { | ||
// success | ||
} else { | ||
try { | ||
findBoooksByAuthor(author, function(books, err) { | ||
if (err) { | ||
failure(err); | ||
} else { | ||
try { | ||
foundBooks(books); | ||
} catch(reason) { | ||
failure(reason); | ||
} | ||
} | ||
}); | ||
} catch(error) { | ||
failure(err); | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findResult().then(function(result){ | ||
// success | ||
}, function(reason){ | ||
// failure | ||
}); | ||
``` | ||
Advanced Example | ||
-------------- | ||
Synchronous Example | ||
```javascript | ||
let author, books; | ||
try { | ||
author = findAuthor(); | ||
books = findBooksByAuthor(author); | ||
// success | ||
} catch(reason) { | ||
// failure | ||
} | ||
``` | ||
}); | ||
``` | ||
Promise Example; | ||
```javascript | ||
findAuthor(). | ||
then(findBooksByAuthor). | ||
then(function(books){ | ||
// found books | ||
}).catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method then | ||
@param {Function} onFulfilled | ||
@param {Function} onRejected | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
/** | ||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | ||
as the catch block of a try/catch statement. | ||
```js | ||
function findAuthor(){ | ||
throw new Error('couldn't find that author'); | ||
} | ||
// synchronous | ||
try { | ||
findAuthor(); | ||
} catch(reason) { | ||
// something went wrong | ||
} | ||
// async with promises | ||
findAuthor().catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method catch | ||
@param {Function} onRejection | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
Promise.prototype.catch = function _catch(onRejection) { | ||
return this.then(null, onRejection); | ||
}; | ||
/** | ||
`finally` will be invoked regardless of the promise's fate just as native | ||
try/catch/finally behaves | ||
Errback Example | ||
Synchronous example: | ||
```js | ||
function foundBooks(books) { | ||
findAuthor() { | ||
if (Math.random() > 0.5) { | ||
throw new Error(); | ||
} | ||
return new Author(); | ||
} | ||
function failure(reason) { | ||
try { | ||
return findAuthor(); // succeed or fail | ||
} catch(error) { | ||
return findOtherAuther(); | ||
} finally { | ||
// always runs | ||
// doesn't affect the return value | ||
} | ||
findAuthor(function(author, err){ | ||
if (err) { | ||
failure(err); | ||
// failure | ||
} else { | ||
try { | ||
findBoooksByAuthor(author, function(books, err) { | ||
if (err) { | ||
failure(err); | ||
} else { | ||
try { | ||
foundBooks(books); | ||
} catch(reason) { | ||
failure(reason); | ||
} | ||
} | ||
}); | ||
} catch(error) { | ||
failure(err); | ||
} | ||
// success | ||
} | ||
}); | ||
``` | ||
Promise Example; | ||
Asynchronous example: | ||
```javascript | ||
findAuthor(). | ||
then(findBooksByAuthor). | ||
then(function(books){ | ||
// found books | ||
}).catch(function(reason){ | ||
// something went wrong | ||
}); | ||
``` | ||
@method then | ||
@param {Function} onFulfilled | ||
@param {Function} onRejected | ||
Useful for tooling. | ||
@return {Promise} | ||
*/ | ||
then: then, | ||
/** | ||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | ||
as the catch block of a try/catch statement. | ||
```js | ||
function findAuthor(){ | ||
throw new Error('couldn't find that author'); | ||
} | ||
// synchronous | ||
try { | ||
findAuthor(); | ||
} catch(reason) { | ||
// something went wrong | ||
} | ||
// async with promises | ||
findAuthor().catch(function(reason){ | ||
// something went wrong | ||
return findOtherAuther(); | ||
}).finally(function(){ | ||
// author was either found, or not | ||
}); | ||
``` | ||
@method catch | ||
@param {Function} onRejection | ||
Useful for tooling. | ||
@method finally | ||
@param {Function} callback | ||
@return {Promise} | ||
*/ | ||
'catch': function _catch(onRejection) { | ||
return this.then(null, onRejection); | ||
} | ||
}; | ||
Promise.prototype.finally = function _finally(callback) { | ||
var promise = this; | ||
var constructor = promise.constructor; | ||
return promise.then(function (value) { | ||
return constructor.resolve(callback()).then(function () { | ||
return value; | ||
}); | ||
}, function (reason) { | ||
return constructor.resolve(callback()).then(function () { | ||
throw reason; | ||
}); | ||
}); | ||
}; | ||
return Promise; | ||
}(); | ||
Promise$1.prototype.then = then; | ||
Promise$1.all = all; | ||
Promise$1.race = race; | ||
Promise$1.resolve = resolve$1; | ||
Promise$1.reject = reject$1; | ||
Promise$1._setScheduler = setScheduler; | ||
Promise$1._setAsap = setAsap; | ||
Promise$1._asap = asap; | ||
/*global self*/ | ||
function polyfill$1() { | ||
var local = undefined; | ||
function polyfill() { | ||
var local = void 0; | ||
@@ -1161,13 +1192,15 @@ if (typeof global !== 'undefined') { | ||
local.Promise = Promise$2; | ||
local.Promise = Promise$1; | ||
} | ||
// Strange compat.. | ||
Promise$2.polyfill = polyfill$1; | ||
Promise$2.Promise = Promise$2; | ||
Promise$1.polyfill = polyfill; | ||
Promise$1.Promise = Promise$1; | ||
return Promise$2; | ||
return Promise$1; | ||
}))); | ||
//# sourceMappingURL=es6-promise.map |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){I=t}function r(t){J=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof H?function(){H(a)}:c()}function s(){var t=0,e=new V(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t<G;t+=2){var e=$[t],n=$[t+1];e(n),$[t]=void 0,$[t+1]=void 0}G=0}function f(){try{var t=require,e=t("vertx");return H=e.runOnLoop||e.runOnContext,i()}catch(n){return c()}}function l(t,e){var n=arguments,r=this,o=new this.constructor(p);void 0===o[et]&&k(o);var i=r._state;return i?!function(){var t=n[i-1];J(function(){return x(i,o,t,r._result)})}():E(r,o,t,e),o}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return g(n,t),n}function p(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function _(t){try{return t.then}catch(e){return it.error=e,it}}function y(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function m(t,e,n){J(function(t){var r=!1,o=y(n,e,function(n){r||(r=!0,e!==n?g(t,n):S(t,n))},function(e){r||(r=!0,j(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,j(t,o))},t)}function b(t,e){e._state===rt?S(t,e._result):e._state===ot?j(t,e._result):E(e,void 0,function(e){return g(t,e)},function(e){return j(t,e)})}function w(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.resolve===h?b(t,n):r===it?(j(t,it.error),it.error=null):void 0===r?S(t,n):e(r)?m(t,n,r):S(t,n)}function g(e,n){e===n?j(e,v()):t(n)?w(e,n,_(n)):S(e,n)}function A(t){t._onerror&&t._onerror(t._result),T(t)}function S(t,e){t._state===nt&&(t._result=e,t._state=rt,0!==t._subscribers.length&&J(T,t))}function j(t,e){t._state===nt&&(t._state=ot,t._result=e,J(A,t))}function E(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+rt]=n,o[i+ot]=r,0===i&&t._state&&J(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?x(n,r,o,i):o(i);t._subscribers.length=0}}function M(){this.error=null}function P(t,e){try{return t(e)}catch(n){return st.error=n,st}}function x(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=void 0,a=void 0;if(i){if(s=P(r,o),s===st?(a=!0,u=s.error,s.error=null):c=!0,n===s)return void j(n,d())}else s=o,c=!0;n._state!==nt||(i&&c?g(n,s):a?j(n,u):t===rt?S(n,s):t===ot&&j(n,s))}function C(t,e){try{e(function(e){g(t,e)},function(e){j(t,e)})}catch(n){j(t,n)}}function O(){return ut++}function k(t){t[et]=ut++,t._state=void 0,t._result=void 0,t._subscribers=[]}function Y(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[et]||k(this.promise),B(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):j(this.promise,q())}function q(){return new Error("Array Methods must be provided an Array")}function F(t){return new Y(this,t).promise}function D(t){var e=this;return new e(B(t)?function(n,r){for(var o=t.length,i=0;i<o;i++)e.resolve(t[i]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function K(t){var e=this,n=new e(p);return j(n,t),n}function L(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function N(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(t){this[et]=O(),this._result=this._state=void 0,this._subscribers=[],p!==t&&("function"!=typeof t&&L(),this instanceof U?C(this,t):N())}function W(){var t=void 0;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if("[object Promise]"===r&&!n.cast)return}t.Promise=U}var z=void 0;z=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var B=z,G=0,H=void 0,I=void 0,J=function(t,e){$[G]=t,$[G+1]=e,G+=2,2===G&&(I?I(a):tt())},Q="undefined"!=typeof window?window:void 0,R=Q||{},V=R.MutationObserver||R.WebKitMutationObserver,X="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Z="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,$=new Array(1e3),tt=void 0;tt=X?o():V?s():Z?u():void 0===Q&&"function"==typeof require?f():c();var et=Math.random().toString(36).substring(16),nt=void 0,rt=1,ot=2,it=new M,st=new M,ut=0;return Y.prototype._enumerate=function(t){for(var e=0;this._state===nt&&e<t.length;e++)this._eachEntry(t[e],e)},Y.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var o=_(t);if(o===l&&t._state!==nt)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===U){var i=new n(p);w(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},Y.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===nt&&(this._remaining--,t===ot?j(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},Y.prototype._willSettleAt=function(t,e){var n=this;E(t,void 0,function(t){return n._settledAt(rt,e,t)},function(t){return n._settledAt(ot,e,t)})},U.all=F,U.race=D,U.resolve=h,U.reject=K,U._setScheduler=n,U._setAsap=r,U._asap=J,U.prototype={constructor:U,then:l,"catch":function(t){return this.then(null,t)}},U.polyfill=W,U.Promise=U,U}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){G=t}function r(t){H=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof B?function(){B(a)}:c()}function s(){var t=0,e=new Q(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t<z;t+=2){var e=X[t],n=X[t+1];e(n),X[t]=void 0,X[t+1]=void 0}z=0}function f(){try{var t=require,e=t("vertx");return B=e.runOnLoop||e.runOnContext,i()}catch(n){return c()}}function l(t,e){var n=this,r=new this.constructor(p);void 0===r[$]&&k(r);var o=n._state;if(o){var i=arguments[o-1];H(function(){return x(o,r,i,n._result)})}else E(n,r,t,e);return r}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return g(n,t),n}function p(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function _(t){try{return t.then}catch(e){return rt.error=e,rt}}function y(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function m(t,e,n){H(function(t){var r=!1,o=y(n,e,function(n){r||(r=!0,e!==n?g(t,n):S(t,n))},function(e){r||(r=!0,j(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,j(t,o))},t)}function b(t,e){e._state===et?S(t,e._result):e._state===nt?j(t,e._result):E(e,void 0,function(e){return g(t,e)},function(e){return j(t,e)})}function w(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.resolve===h?b(t,n):r===rt?(j(t,rt.error),rt.error=null):void 0===r?S(t,n):e(r)?m(t,n,r):S(t,n)}function g(e,n){e===n?j(e,v()):t(n)?w(e,n,_(n)):S(e,n)}function A(t){t._onerror&&t._onerror(t._result),M(t)}function S(t,e){t._state===tt&&(t._result=e,t._state=et,0!==t._subscribers.length&&H(M,t))}function j(t,e){t._state===tt&&(t._state=nt,t._result=e,H(A,t))}function E(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+et]=n,o[i+nt]=r,0===i&&t._state&&H(M,t)}function M(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?x(n,r,o,i):o(i);t._subscribers.length=0}}function T(){this.error=null}function P(t,e){try{return t(e)}catch(n){return ot.error=n,ot}}function x(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=void 0,a=void 0;if(i){if(s=P(r,o),s===ot?(a=!0,u=s.error,s.error=null):c=!0,n===s)return void j(n,d())}else s=o,c=!0;n._state!==tt||(i&&c?g(n,s):a?j(n,u):t===et?S(n,s):t===nt&&j(n,s))}function C(t,e){try{e(function(e){g(t,e)},function(e){j(t,e)})}catch(n){j(t,n)}}function O(){return it++}function k(t){t[$]=it++,t._state=void 0,t._result=void 0,t._subscribers=[]}function Y(){return new Error("Array Methods must be provided an Array")}function Y(){return new Error("Array Methods must be provided an Array")}function q(t){return new st(this,t).promise}function F(t){var e=this;return new e(W(t)?function(n,r){for(var o=t.length,i=0;i<o;i++)e.resolve(t[i]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function D(t){var e=this,n=new e(p);return j(n,t),n}function K(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function L(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(){var t=void 0;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if("[object Promise]"===r&&!n.cast)return}t.Promise=ut}var U=void 0;U=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var W=U,z=0,B=void 0,G=void 0,H=function(t,e){X[z]=t,X[z+1]=e,z+=2,2===z&&(G?G(a):Z())},I="undefined"!=typeof window?window:void 0,J=I||{},Q=J.MutationObserver||J.WebKitMutationObserver,R="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3),Z=void 0;Z=R?o():Q?s():V?u():void 0===I&&"function"==typeof require?f():c();var $=Math.random().toString(36).substring(16),tt=void 0,et=1,nt=2,rt=new T,ot=new T,it=0,st=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[$]||k(this.promise),W(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):j(this.promise,Y())}return t.prototype._enumerate=function(t){for(var e=0;this._state===tt&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var o=_(t);if(o===l&&t._state!==tt)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===ut){var i=new n(p);w(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===tt&&(this._remaining--,t===nt?j(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;E(t,void 0,function(t){return n._settledAt(et,e,t)},function(t){return n._settledAt(nt,e,t)})},t}(),ut=function(){function t(e){this[$]=O(),this._result=this._state=void 0,this._subscribers=[],p!==e&&("function"!=typeof e&&K(),this instanceof t?C(this,e):L())}return t.prototype["catch"]=function(t){return this.then(null,t)},t.prototype["finally"]=function(t){var e=this,n=e.constructor;return e.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})})},t}();return ut.prototype.then=l,ut.all=q,ut.race=F,ut.resolve=h,ut.reject=D,ut._setScheduler=n,ut._setAsap=r,ut._asap=H,ut.polyfill=N,ut.Promise=ut,ut}); |
@@ -37,2 +37,9 @@ export interface Thenable <R> { | ||
/** | ||
* onSettled is invoked when/if the "promise" settles (either rejects or fulfills); | ||
* | ||
* @param onFinally called when/if "promise" settles | ||
*/ | ||
finally <U> (onFinally?: (callback: any) => U | Thenable<U>): Promise<U>; | ||
/** | ||
* Make a new promise from the thenable. | ||
@@ -39,0 +46,0 @@ * A thenable is promise-like in as far as it has a "then" method. |
@@ -24,89 +24,93 @@ import { | ||
export default Enumerator; | ||
function Enumerator(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
} | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
}; | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
export default class Enumerator { | ||
constructor(Constructor, input) { | ||
this._instanceConstructor = Constructor; | ||
this.promise = new Constructor(noop); | ||
this._result = new Array(this.length); | ||
if (!this.promise[PROMISE_ID]) { | ||
makePromise(this.promise); | ||
} | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
if (isArray(input)) { | ||
this.length = input.length; | ||
this._remaining = input.length; | ||
this._result = new Array(this.length); | ||
if (this.length === 0) { | ||
fulfill(this.promise, this._result); | ||
} else { | ||
this.length = this.length || 0; | ||
this._enumerate(input); | ||
if (this._remaining === 0) { | ||
fulfill(this.promise, this._result); | ||
} | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} else { | ||
reject(this.promise, validationError()); | ||
} | ||
} | ||
function validationError() { | ||
return new Error('Array Methods must be provided an Array'); | ||
}; | ||
Enumerator.prototype._enumerate = function(input) { | ||
for (let i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
_enumerate(input) { | ||
for (let i = 0; this._state === PENDING && i < input.length; i++) { | ||
this._eachEntry(input[i], i); | ||
} | ||
} | ||
}; | ||
Enumerator.prototype._eachEntry = function(entry, i) { | ||
let c = this._instanceConstructor; | ||
let { resolve } = c; | ||
_eachEntry(entry, i) { | ||
let c = this._instanceConstructor; | ||
let { resolve } = c; | ||
if (resolve === originalResolve) { | ||
let then = getThen(entry); | ||
if (resolve === originalResolve) { | ||
let then = getThen(entry); | ||
if (then === originalThen && | ||
if (then === originalThen && | ||
entry._state !== PENDING) { | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise) { | ||
let promise = new c(noop); | ||
handleMaybeThenable(promise, entry, then); | ||
this._willSettleAt(promise, i); | ||
this._settledAt(entry._state, i, entry._result); | ||
} else if (typeof then !== 'function') { | ||
this._remaining--; | ||
this._result[i] = entry; | ||
} else if (c === Promise) { | ||
let promise = new c(noop); | ||
handleMaybeThenable(promise, entry, then); | ||
this._willSettleAt(promise, i); | ||
} else { | ||
this._willSettleAt(new c(resolve => resolve(entry)), i); | ||
} | ||
} else { | ||
this._willSettleAt(new c(resolve => resolve(entry)), i); | ||
this._willSettleAt(resolve(entry), i); | ||
} | ||
} else { | ||
this._willSettleAt(resolve(entry), i); | ||
} | ||
}; | ||
Enumerator.prototype._settledAt = function(state, i, value) { | ||
let { promise } = this; | ||
_settledAt(state, i, value) { | ||
let { promise } = this; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (promise._state === PENDING) { | ||
this._remaining--; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
if (state === REJECTED) { | ||
reject(promise, value); | ||
} else { | ||
this._result[i] = value; | ||
} | ||
} | ||
} | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
if (this._remaining === 0) { | ||
fulfill(promise, this._result); | ||
} | ||
} | ||
}; | ||
Enumerator.prototype._willSettleAt = function(promise, i) { | ||
let enumerator = this; | ||
_willSettleAt(promise, i) { | ||
let enumerator = this; | ||
subscribe(promise, undefined, value => enumerator._settledAt(FULFILLED, i, value), | ||
reason => enumerator._settledAt(REJECTED, i, reason)); | ||
}; | ||
subscribe(promise, undefined, value => enumerator._settledAt(FULFILLED, i, value), | ||
reason => enumerator._settledAt(REJECTED, i, reason)); | ||
} | ||
} |
@@ -24,3 +24,2 @@ import { | ||
function needsResolver() { | ||
@@ -133,29 +132,20 @@ throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); | ||
@class Promise | ||
@param {function} resolver | ||
@param {Function} resolver | ||
Useful for tooling. | ||
@constructor | ||
*/ | ||
export default function Promise(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise ? initializePromise(this, resolver) : needsNew(); | ||
class Promise { | ||
constructor(resolver) { | ||
this[PROMISE_ID] = nextId(); | ||
this._result = this._state = undefined; | ||
this._subscribers = []; | ||
if (noop !== resolver) { | ||
typeof resolver !== 'function' && needsResolver(); | ||
this instanceof Promise ? initializePromise(this, resolver) : needsNew(); | ||
} | ||
} | ||
} | ||
Promise.all = all; | ||
Promise.race = race; | ||
Promise.resolve = Resolve; | ||
Promise.reject = Reject; | ||
Promise._setScheduler = setScheduler; | ||
Promise._setAsap = setAsap; | ||
Promise._asap = asap; | ||
Promise.prototype = { | ||
constructor: Promise, | ||
/** | ||
/** | ||
The primary way of interacting with a promise is through its `then` method, | ||
@@ -352,6 +342,5 @@ which registers callbacks to receive either a promise's eventual value or the | ||
@return {Promise} | ||
*/ | ||
then: then, | ||
*/ | ||
/** | ||
/** | ||
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | ||
@@ -382,6 +371,63 @@ as the catch block of a try/catch statement. | ||
@return {Promise} | ||
*/ | ||
*/ | ||
catch(onRejection) { | ||
return this.then(null, onRejection); | ||
} | ||
}; | ||
/** | ||
`finally` will be invoked regardless of the promise's fate just as native | ||
try/catch/finally behaves | ||
Synchronous example: | ||
```js | ||
findAuthor() { | ||
if (Math.random() > 0.5) { | ||
throw new Error(); | ||
} | ||
return new Author(); | ||
} | ||
try { | ||
return findAuthor(); // succeed or fail | ||
} catch(error) { | ||
return findOtherAuther(); | ||
} finally { | ||
// always runs | ||
// doesn't affect the return value | ||
} | ||
``` | ||
Asynchronous example: | ||
```js | ||
findAuthor().catch(function(reason){ | ||
return findOtherAuther(); | ||
}).finally(function(){ | ||
// author was either found, or not | ||
}); | ||
``` | ||
@method finally | ||
@param {Function} callback | ||
@return {Promise} | ||
*/ | ||
finally(callback) { | ||
let promise = this; | ||
let constructor = promise.constructor; | ||
return promise.then(value => constructor.resolve(callback()).then(() => value), | ||
reason => constructor.resolve(callback()).then(() => { throw reason; })); | ||
} | ||
} | ||
Promise.prototype.then = then; | ||
export default Promise; | ||
Promise.all = all; | ||
Promise.race = race; | ||
Promise.resolve = Resolve; | ||
Promise.reject = Reject; | ||
Promise._setScheduler = setScheduler; | ||
Promise._setAsap = setAsap; | ||
Promise._asap = asap; | ||
{ | ||
"name": "es6-promise", | ||
"namespace": "es6-promise", | ||
"version": "4.1.1", | ||
"version": "4.2.0", | ||
"description": "A lightweight library that provides tools for organizing asynchronous code", | ||
@@ -19,17 +19,26 @@ "main": "dist/es6-promise.js", | ||
"devDependencies": { | ||
"broccoli-babel-transpiler": "^5.6.1", | ||
"babel-plugin-transform-es2015-arrow-functions": "^6.22.0", | ||
"babel-plugin-transform-es2015-block-scoping": "^6.24.1", | ||
"babel-plugin-transform-es2015-classes": "^6.24.1", | ||
"babel-plugin-transform-es2015-computed-properties": "^6.24.1", | ||
"babel-plugin-transform-es2015-constants": "^6.1.4", | ||
"babel-plugin-transform-es2015-destructuring": "^6.23.0", | ||
"babel-plugin-transform-es2015-parameters": "^6.24.1", | ||
"babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", | ||
"babel-plugin-transform-es2015-spread": "^6.22.0", | ||
"babel-plugin-transform-es2015-template-literals": "^6.22.0", | ||
"babel6-plugin-strip-class-callcheck": "^6.0.0", | ||
"broccoli-babel-transpiler": "^6.0.0", | ||
"broccoli-concat": "^3.1.0", | ||
"broccoli-merge-trees": "^1.2.3", | ||
"broccoli-rollup": "^1.0.2", | ||
"broccoli-stew": "^1.2.0", | ||
"broccoli-merge-trees": "^2.0.0", | ||
"broccoli-rollup": "^2.0.0", | ||
"broccoli-stew": "^1.5.0", | ||
"broccoli-uglify-js": "^0.2.0", | ||
"broccoli-watchify": "^1.0.1", | ||
"ember-cli": "2.12.2", | ||
"ember-cli-dependency-checker": "^1.3.0", | ||
"ember-publisher": "0.0.7", | ||
"git-repo-version": "0.4.1", | ||
"ember-cli": "2.17.1", | ||
"ember-cli-dependency-checker": "^2.1.0", | ||
"git-repo-version": "1.0.1", | ||
"json3": "^3.3.2", | ||
"mocha": "^3.1.0", | ||
"promises-aplus-tests-phantom": "^2.1.0-revise", | ||
"release-it": "2.7.1" | ||
"mocha": "^4.0.1", | ||
"promises-aplus-tests-phantom": "^2.1.0-revise" | ||
}, | ||
@@ -44,4 +53,3 @@ "scripts": { | ||
"prepublish": "ember build --environment production", | ||
"lint": "jshint lib", | ||
"dry-run-release": "ember build --environment production && release-it --dry-run --non-interactive" | ||
"lint": "jshint lib" | ||
}, | ||
@@ -48,0 +56,0 @@ "repository": { |
# ES6-Promise (subset of [rsvp.js](https://github.com/tildeio/rsvp.js)) [![Build Status](https://travis-ci.org/stefanpenner/es6-promise.svg?branch=master)](https://travis-ci.org/stefanpenner/es6-promise) | ||
This is a polyfill of the [ES6 Promise](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-constructor). The implementation is a subset of [rsvp.js](https://github.com/tildeio/rsvp.js) extracted by @jakearchibald, if you're wanting extra features and more debugging options, check out the [full library](https://github.com/tildeio/rsvp.js). | ||
This is a polyfill of the [ES6 Promise](http://www.ecma-international.org/ecma-262/6.0/#sec-promise-constructor). The implementation is a subset of [rsvp.js](https://github.com/tildeio/rsvp.js) extracted by @jakearchibald, if you're wanting extra features and more debugging options, check out the [full library](https://github.com/tildeio/rsvp.js). | ||
@@ -9,7 +9,22 @@ For API details and how to use promises, see the <a href="http://www.html5rocks.com/en/tutorials/es6/promises/">JavaScript Promises HTML5Rocks article</a>. | ||
* [es6-promise 27.86 KB (7.33 KB gzipped)](https://raw.githubusercontent.com/stefanpenner/es6-promise/master/dist/es6-promise.js) | ||
* [es6-promise-auto 27.78 KB (7.3 KB gzipped)](https://raw.githubusercontent.com/stefanpenner/es6-promise/master/dist/es6-promise.auto.js) - Automatically provides/replaces `Promise` if missing or broken. | ||
* [es6-promise-min 6.17 KB (2.4 KB gzipped)](https://raw.githubusercontent.com/stefanpenner/es6-promise/master/dist/es6-promise.min.js) | ||
* [es6-promise-auto-min 6.19 KB (2.4 KB gzipped)](https://raw.githubusercontent.com/stefanpenner/es6-promise/master/dist/es6-promise.auto.min.js) - Minified version of `es6-promise-auto` above. | ||
* [es6-promise 27.86 KB (7.33 KB gzipped)](https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js) | ||
* [es6-promise-auto 27.78 KB (7.3 KB gzipped)](https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.auto.js) - Automatically provides/replaces `Promise` if missing or broken. | ||
* [es6-promise-min 6.17 KB (2.4 KB gzipped)](https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.min.js) | ||
* [es6-promise-auto-min 6.19 KB (2.4 KB gzipped)](https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.auto.min.js) - Minified version of `es6-promise-auto` above. | ||
## CDN | ||
To use via a CDN include this in your html: | ||
```html | ||
<!-- Automatically provides/replaces `Promise` if missing or broken. --> | ||
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script> | ||
<!-- Minified version of `es6-promise-auto` below. --> | ||
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.min.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script> | ||
``` | ||
## Node.js | ||
@@ -40,5 +55,9 @@ | ||
`catch` is a reserved word in IE<9, meaning `promise.catch(func)` throws a syntax error. To work around this, you can use a string to access the property as shown in the following example. | ||
`catch` and `finally` are reserved keywords in IE<9, meaning | ||
`promise.catch(func)` or `promise.finally(func)` throw a syntax error. To work | ||
around this, you can use a string to access the property as shown in the | ||
following example. | ||
However, please remember that such technique is already provided by most common minifiers, making the resulting code safe for old browsers and production: | ||
However most minifiers will automatically fix this for you, making the | ||
resulting code safe for old browsers and production: | ||
@@ -51,6 +70,4 @@ ```js | ||
Or use `.then` instead: | ||
```js | ||
promise.then(undefined, function(err) { | ||
promise['finally'](function() { | ||
// ... | ||
@@ -57,0 +74,0 @@ }); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
318918
3131
100
24