Update Bluebird to 3.3.5
This commit is contained in:
parent
2a8cd27b49
commit
1502985d98
1 changed files with 348 additions and 208 deletions
|
@ -23,25 +23,25 @@
|
|||
*
|
||||
*/
|
||||
/**
|
||||
* bluebird build version 3.1.1
|
||||
* bluebird build version 3.3.5
|
||||
* Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each
|
||||
*/
|
||||
!function(e){
|
||||
//
|
||||
// Added by Zotero
|
||||
//
|
||||
EXPORTED_SYMBOLS = ["Promise"];
|
||||
|
||||
// Set BackstagePass (which contains .Error, etc.) as global object
|
||||
self = this;
|
||||
|
||||
// Added by Zotero
|
||||
//
|
||||
EXPORTED_SYMBOLS = ["Promise"];
|
||||
|
||||
// Set BackstagePass (which contains .Error, etc.) as global object
|
||||
self = this;
|
||||
|
||||
// We need to maintain references to running nsITimers. Otherwise, they can
|
||||
// get garbage collected before they fire. Also, we might need to cancel them.
|
||||
var _runningTimers = {};
|
||||
|
||||
// Provide an implementation of setTimeout
|
||||
self.setTimeout = function (func, ms) {
|
||||
var id = Math.floor(Math.random() * (1000000000000 - 1)) + 1
|
||||
var _runningTimers = {};
|
||||
|
||||
// Provide an implementation of setTimeout
|
||||
self.setTimeout = function (func, ms) {
|
||||
var id = Math.floor(Math.random() * (1000000000000 - 1)) + 1
|
||||
var useMethodjit = Components.utils.methodjit;
|
||||
var timer = Components.classes["@mozilla.org/timer;1"]
|
||||
.createInstance(Components.interfaces.nsITimer);
|
||||
|
@ -75,41 +75,40 @@
|
|||
}}, ms, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
||||
_runningTimers[id] = timer;
|
||||
return id;
|
||||
};
|
||||
self.clearTimeout = function (id) {
|
||||
var timer = _runningTimers[id];
|
||||
if (timer) {
|
||||
timer.cancel();
|
||||
}
|
||||
delete _runningTimers[id];
|
||||
}
|
||||
|
||||
self.debug = function (msg) {
|
||||
dump(msg + "\n\n");
|
||||
};
|
||||
|
||||
Promise = e();
|
||||
Promise.config({
|
||||
};
|
||||
self.clearTimeout = function (id) {
|
||||
var timer = _runningTimers[id];
|
||||
if (timer) {
|
||||
timer.cancel();
|
||||
}
|
||||
delete _runningTimers[id];
|
||||
}
|
||||
|
||||
self.debug = function (msg) {
|
||||
dump(msg + "\n\n");
|
||||
};
|
||||
|
||||
Promise = e();
|
||||
Promise.config({
|
||||
warnings: true,
|
||||
longStackTraces: true,
|
||||
cancellation: true
|
||||
});
|
||||
// TEMP: Only turn on if debug logging enabled?
|
||||
Promise.onPossiblyUnhandledRejection(function (e, promise) {
|
||||
longStackTraces: true,
|
||||
cancellation: true
|
||||
});
|
||||
// TEMP: Only turn on if debug logging enabled?
|
||||
Promise.onPossiblyUnhandledRejection(function (e, promise) {
|
||||
if (e.name == 'ZoteroPromiseInterrupt') {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Ignore some errors during tests
|
||||
if (e.message && e.message.indexOf(' -- ignore') != -1) return;
|
||||
|
||||
self.debug('Possibly unhandled rejection:\n\n' + e.message);
|
||||
throw e;
|
||||
});
|
||||
return;
|
||||
|
||||
|
||||
/*if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}*/}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
|
||||
self.debug('Possibly unhandled rejection:\n\n' + e.message);
|
||||
throw e;
|
||||
});
|
||||
return;
|
||||
|
||||
/*if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}*/}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
|
||||
"use strict";
|
||||
module.exports = function(Promise) {
|
||||
var SomePromiseArray = Promise._SomePromiseArray;
|
||||
|
@ -141,6 +140,7 @@ var Queue = _dereq_("./queue");
|
|||
var util = _dereq_("./util");
|
||||
|
||||
function Async() {
|
||||
this._customScheduler = false;
|
||||
this._isTickUsed = false;
|
||||
this._lateQueue = new Queue(16);
|
||||
this._normalQueue = new Queue(16);
|
||||
|
@ -153,6 +153,17 @@ function Async() {
|
|||
this._schedule = schedule;
|
||||
}
|
||||
|
||||
Async.prototype.setScheduler = function(fn) {
|
||||
var prev = this._schedule;
|
||||
this._schedule = fn;
|
||||
this._customScheduler = true;
|
||||
return prev;
|
||||
};
|
||||
|
||||
Async.prototype.hasCustomScheduler = function() {
|
||||
return this._customScheduler;
|
||||
};
|
||||
|
||||
Async.prototype.enableTrampoline = function() {
|
||||
this._trampolineEnabled = true;
|
||||
};
|
||||
|
@ -170,7 +181,8 @@ Async.prototype.haveItemsQueued = function () {
|
|||
|
||||
Async.prototype.fatalError = function(e, isNode) {
|
||||
if (isNode) {
|
||||
process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e));
|
||||
process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) +
|
||||
"\n");
|
||||
process.exit(2);
|
||||
} else {
|
||||
this.throwLater(e);
|
||||
|
@ -876,6 +888,86 @@ Promise.hasLongStackTraces = function () {
|
|||
return config.longStackTraces && longStackTracesIsSupported();
|
||||
};
|
||||
|
||||
var fireDomEvent = (function() {
|
||||
try {
|
||||
var event = document.createEvent("CustomEvent");
|
||||
event.initCustomEvent("testingtheevent", false, true, {});
|
||||
util.global.dispatchEvent(event);
|
||||
return function(name, event) {
|
||||
var domEvent = document.createEvent("CustomEvent");
|
||||
domEvent.initCustomEvent(name.toLowerCase(), false, true, event);
|
||||
return !util.global.dispatchEvent(domEvent);
|
||||
};
|
||||
} catch (e) {}
|
||||
return function() {
|
||||
return false;
|
||||
};
|
||||
})();
|
||||
|
||||
var fireGlobalEvent = (function() {
|
||||
if (util.isNode) {
|
||||
return function() {
|
||||
return process.emit.apply(process, arguments);
|
||||
};
|
||||
} else {
|
||||
if (!util.global) {
|
||||
return function() {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
return function(name) {
|
||||
var methodName = "on" + name.toLowerCase();
|
||||
var method = util.global[methodName];
|
||||
if (!method) return false;
|
||||
method.apply(util.global, [].slice.call(arguments, 1));
|
||||
return true;
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
||||
function generatePromiseLifecycleEventObject(name, promise) {
|
||||
return {promise: promise};
|
||||
}
|
||||
|
||||
var eventToObjectGenerator = {
|
||||
promiseCreated: generatePromiseLifecycleEventObject,
|
||||
promiseFulfilled: generatePromiseLifecycleEventObject,
|
||||
promiseRejected: generatePromiseLifecycleEventObject,
|
||||
promiseResolved: generatePromiseLifecycleEventObject,
|
||||
promiseCancelled: generatePromiseLifecycleEventObject,
|
||||
promiseChained: function(name, promise, child) {
|
||||
return {promise: promise, child: child};
|
||||
},
|
||||
warning: function(name, warning) {
|
||||
return {warning: warning};
|
||||
},
|
||||
unhandledRejection: function (name, reason, promise) {
|
||||
return {reason: reason, promise: promise};
|
||||
},
|
||||
rejectionHandled: generatePromiseLifecycleEventObject
|
||||
};
|
||||
|
||||
var activeFireEvent = function (name) {
|
||||
var globalEventFired = false;
|
||||
try {
|
||||
globalEventFired = fireGlobalEvent.apply(null, arguments);
|
||||
} catch (e) {
|
||||
async.throwLater(e);
|
||||
globalEventFired = true;
|
||||
}
|
||||
|
||||
var domEventFired = false;
|
||||
try {
|
||||
domEventFired = fireDomEvent(name,
|
||||
eventToObjectGenerator[name].apply(null, arguments));
|
||||
} catch (e) {
|
||||
async.throwLater(e);
|
||||
domEventFired = true;
|
||||
}
|
||||
|
||||
return domEventFired || globalEventFired;
|
||||
};
|
||||
|
||||
Promise.config = function(opts) {
|
||||
opts = Object(opts);
|
||||
if ("longStackTraces" in opts) {
|
||||
|
@ -912,8 +1004,20 @@ Promise.config = function(opts) {
|
|||
propagateFromFunction = cancellationPropagateFrom;
|
||||
config.cancellation = true;
|
||||
}
|
||||
if ("monitoring" in opts) {
|
||||
if (opts.monitoring && !config.monitoring) {
|
||||
config.monitoring = true;
|
||||
Promise.prototype._fireEvent = activeFireEvent;
|
||||
} else if (!opts.monitoring && config.monitoring) {
|
||||
config.monitoring = false;
|
||||
Promise.prototype._fireEvent = defaultFireEvent;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function defaultFireEvent() { return false; }
|
||||
|
||||
Promise.prototype._fireEvent = defaultFireEvent;
|
||||
Promise.prototype._execute = function(executor, resolve, reject) {
|
||||
try {
|
||||
executor(resolve, reject);
|
||||
|
@ -1038,6 +1142,7 @@ function checkForgottenReturns(returnValue, promiseCreated, name, promise,
|
|||
if (returnValue === undefined && promiseCreated !== null &&
|
||||
wForgottenReturn) {
|
||||
if (parent !== undefined && parent._returnedNonUndefined()) return;
|
||||
if ((promise._bitField & 65535) === 0) return;
|
||||
|
||||
if (name) name = name + " ";
|
||||
var msg = "a promise was created in a " + name +
|
||||
|
@ -1065,7 +1170,10 @@ function warn(message, shouldUseOwnTrace, promise) {
|
|||
var parsed = parseStackAndMessage(warning);
|
||||
warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
|
||||
}
|
||||
formatAndLogError(warning, "", true);
|
||||
|
||||
if (!activeFireEvent("warning", warning)) {
|
||||
formatAndLogError(warning, "", true);
|
||||
}
|
||||
}
|
||||
|
||||
function reconstructStack(message, stacks) {
|
||||
|
@ -1192,30 +1300,12 @@ function fireRejectionEvent(name, localHandler, reason, promise) {
|
|||
async.throwLater(e);
|
||||
}
|
||||
|
||||
var globalEventFired = false;
|
||||
try {
|
||||
globalEventFired = fireGlobalEvent(name, reason, promise);
|
||||
} catch (e) {
|
||||
globalEventFired = true;
|
||||
async.throwLater(e);
|
||||
}
|
||||
|
||||
var domEventFired = false;
|
||||
if (fireDomEvent) {
|
||||
try {
|
||||
domEventFired = fireDomEvent(name.toLowerCase(), {
|
||||
reason: reason,
|
||||
promise: promise
|
||||
});
|
||||
} catch (e) {
|
||||
domEventFired = true;
|
||||
async.throwLater(e);
|
||||
if (name === "unhandledRejection") {
|
||||
if (!activeFireEvent(name, reason, promise) && !localEventFired) {
|
||||
formatAndLogError(reason, "Unhandled rejection ");
|
||||
}
|
||||
}
|
||||
|
||||
if (!globalEventFired && !localEventFired && !domEventFired &&
|
||||
name === "unhandledRejection") {
|
||||
formatAndLogError(reason, "Unhandled rejection ");
|
||||
} else {
|
||||
activeFireEvent(name, promise);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1460,59 +1550,6 @@ var captureStackTrace = (function stackDetection() {
|
|||
|
||||
})([]);
|
||||
|
||||
var fireDomEvent;
|
||||
var fireGlobalEvent = (function() {
|
||||
if (util.isNode) {
|
||||
return function(name, reason, promise) {
|
||||
if (name === "rejectionHandled") {
|
||||
return process.emit(name, promise);
|
||||
} else {
|
||||
return process.emit(name, reason, promise);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
var globalObject = typeof self !== "undefined" ? self :
|
||||
typeof window !== "undefined" ? window :
|
||||
typeof global !== "undefined" ? global :
|
||||
this !== undefined ? this : null;
|
||||
|
||||
if (!globalObject) {
|
||||
return function() {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
var event = document.createEvent("CustomEvent");
|
||||
event.initCustomEvent("testingtheevent", false, true, {});
|
||||
globalObject.dispatchEvent(event);
|
||||
fireDomEvent = function(type, detail) {
|
||||
var event = document.createEvent("CustomEvent");
|
||||
event.initCustomEvent(type, false, true, detail);
|
||||
return !globalObject.dispatchEvent(event);
|
||||
};
|
||||
} catch (e) {}
|
||||
|
||||
var toWindowMethodNameMap = {};
|
||||
toWindowMethodNameMap["unhandledRejection"] = ("on" +
|
||||
"unhandledRejection").toLowerCase();
|
||||
toWindowMethodNameMap["rejectionHandled"] = ("on" +
|
||||
"rejectionHandled").toLowerCase();
|
||||
|
||||
return function(name, reason, promise) {
|
||||
var methodName = toWindowMethodNameMap[name];
|
||||
var method = globalObject[methodName];
|
||||
if (!method) return false;
|
||||
if (name === "rejectionHandled") {
|
||||
method.call(globalObject, promise);
|
||||
} else {
|
||||
method.call(globalObject, reason, promise);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
||||
if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
|
||||
printWarning = function (message) {
|
||||
console.warn(message);
|
||||
|
@ -1533,7 +1570,8 @@ if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
|
|||
var config = {
|
||||
warnings: warnings,
|
||||
longStackTraces: false,
|
||||
cancellation: false
|
||||
cancellation: false,
|
||||
monitoring: false
|
||||
};
|
||||
|
||||
if (longStackTraces) Promise.longStackTraces();
|
||||
|
@ -1548,6 +1586,9 @@ return {
|
|||
cancellation: function() {
|
||||
return config.cancellation;
|
||||
},
|
||||
monitoring: function() {
|
||||
return config.monitoring;
|
||||
},
|
||||
propagateFromFunction: function() {
|
||||
return propagateFromFunction;
|
||||
},
|
||||
|
@ -1558,7 +1599,9 @@ return {
|
|||
setBounds: setBounds,
|
||||
warn: warn,
|
||||
deprecated: deprecated,
|
||||
CapturedTrace: CapturedTrace
|
||||
CapturedTrace: CapturedTrace,
|
||||
fireDomEvent: fireDomEvent,
|
||||
fireGlobalEvent: fireGlobalEvent
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1740,7 +1783,12 @@ if (!errorTypes) {
|
|||
RejectionError: OperationalError,
|
||||
AggregateError: AggregateError
|
||||
});
|
||||
notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes);
|
||||
es5.defineProperty(Error, "__BluebirdErrorTypes__", {
|
||||
value: errorTypes,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: false
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
@ -1857,6 +1905,18 @@ var util = _dereq_("./util");
|
|||
var CancellationError = Promise.CancellationError;
|
||||
var errorObj = util.errorObj;
|
||||
|
||||
function PassThroughHandlerContext(promise, type, handler) {
|
||||
this.promise = promise;
|
||||
this.type = type;
|
||||
this.handler = handler;
|
||||
this.called = false;
|
||||
this.cancelPromise = null;
|
||||
}
|
||||
|
||||
PassThroughHandlerContext.prototype.isFinallyHandler = function() {
|
||||
return this.type === 0;
|
||||
};
|
||||
|
||||
function FinallyHandlerCancelReaction(finallyHandler) {
|
||||
this.finallyHandler = finallyHandler;
|
||||
}
|
||||
|
@ -1892,7 +1952,7 @@ function finallyHandler(reasonOrValue) {
|
|||
|
||||
if (!this.called) {
|
||||
this.called = true;
|
||||
var ret = this.type === 0
|
||||
var ret = this.isFinallyHandler()
|
||||
? handler.call(promise._boundValue())
|
||||
: handler.call(promise._boundValue(), reasonOrValue);
|
||||
if (ret !== undefined) {
|
||||
|
@ -1929,13 +1989,11 @@ function finallyHandler(reasonOrValue) {
|
|||
|
||||
Promise.prototype._passThrough = function(handler, type, success, fail) {
|
||||
if (typeof handler !== "function") return this.then();
|
||||
return this._then(success, fail, undefined, {
|
||||
promise: this,
|
||||
handler: handler,
|
||||
called: false,
|
||||
cancelPromise: null,
|
||||
type: type
|
||||
}, undefined);
|
||||
return this._then(success,
|
||||
fail,
|
||||
undefined,
|
||||
new PassThroughHandlerContext(this, type, handler),
|
||||
undefined);
|
||||
};
|
||||
|
||||
Promise.prototype.lastly =
|
||||
|
@ -1950,7 +2008,7 @@ Promise.prototype.tap = function (handler) {
|
|||
return this._passThrough(handler, 1, finallyHandler);
|
||||
};
|
||||
|
||||
return finallyHandler;
|
||||
return PassThroughHandlerContext;
|
||||
};
|
||||
|
||||
},{"./util":36}],16:[function(_dereq_,module,exports){
|
||||
|
@ -1986,9 +2044,18 @@ function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
|
|||
}
|
||||
|
||||
function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
|
||||
var promise = this._promise = new Promise(INTERNAL);
|
||||
promise._captureStackTrace();
|
||||
promise._setOnCancel(this);
|
||||
if (debug.cancellation()) {
|
||||
var internal = new Promise(INTERNAL);
|
||||
var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);
|
||||
this._promise = internal.lastly(function() {
|
||||
return _finallyPromise;
|
||||
});
|
||||
internal._captureStackTrace();
|
||||
internal._setOnCancel(this);
|
||||
} else {
|
||||
var promise = this._promise = new Promise(INTERNAL);
|
||||
promise._captureStackTrace();
|
||||
}
|
||||
this._stack = stack;
|
||||
this._generatorFunction = generatorFunction;
|
||||
this._receiver = receiver;
|
||||
|
@ -1997,6 +2064,7 @@ function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
|
|||
? [yieldHandler].concat(yieldHandlers)
|
||||
: yieldHandlers;
|
||||
this._yieldedPromise = null;
|
||||
this._cancellationPhase = false;
|
||||
}
|
||||
util.inherits(PromiseSpawn, Proxyable);
|
||||
|
||||
|
@ -2006,6 +2074,10 @@ PromiseSpawn.prototype._isResolved = function() {
|
|||
|
||||
PromiseSpawn.prototype._cleanup = function() {
|
||||
this._promise = this._generator = null;
|
||||
if (debug.cancellation() && this._finallyPromise !== null) {
|
||||
this._finallyPromise._fulfill();
|
||||
this._finallyPromise = null;
|
||||
}
|
||||
};
|
||||
|
||||
PromiseSpawn.prototype._promiseCancelled = function() {
|
||||
|
@ -2022,22 +2094,15 @@ PromiseSpawn.prototype._promiseCancelled = function() {
|
|||
result = tryCatch(this._generator["throw"]).call(this._generator,
|
||||
reason);
|
||||
this._promise._popContext();
|
||||
if (result === errorObj && result.e === reason) {
|
||||
result = null;
|
||||
}
|
||||
} else {
|
||||
this._promise._pushContext();
|
||||
result = tryCatch(this._generator["return"]).call(this._generator,
|
||||
undefined);
|
||||
this._promise._popContext();
|
||||
}
|
||||
var promise = this._promise;
|
||||
this._cleanup();
|
||||
if (result === errorObj) {
|
||||
promise._rejectCallback(result.e, false);
|
||||
} else {
|
||||
promise.cancel();
|
||||
}
|
||||
this._cancellationPhase = true;
|
||||
this._yieldedPromise = null;
|
||||
this._continue(result);
|
||||
};
|
||||
|
||||
PromiseSpawn.prototype._promiseFulfilled = function(value) {
|
||||
|
@ -2081,13 +2146,21 @@ PromiseSpawn.prototype._continue = function (result) {
|
|||
var promise = this._promise;
|
||||
if (result === errorObj) {
|
||||
this._cleanup();
|
||||
return promise._rejectCallback(result.e, false);
|
||||
if (this._cancellationPhase) {
|
||||
return promise.cancel();
|
||||
} else {
|
||||
return promise._rejectCallback(result.e, false);
|
||||
}
|
||||
}
|
||||
|
||||
var value = result.value;
|
||||
if (result.done === true) {
|
||||
this._cleanup();
|
||||
return promise._resolveCallback(value);
|
||||
if (this._cancellationPhase) {
|
||||
return promise.cancel();
|
||||
} else {
|
||||
return promise._resolveCallback(value);
|
||||
}
|
||||
} else {
|
||||
var maybePromise = tryConvertToPromise(value, this._promise);
|
||||
if (!(maybePromise instanceof Promise)) {
|
||||
|
@ -2687,7 +2760,8 @@ var Context = _dereq_("./context")(Promise);
|
|||
var createContext = Context.create;
|
||||
var debug = _dereq_("./debuggability")(Promise, Context);
|
||||
var CapturedTrace = debug.CapturedTrace;
|
||||
var finallyHandler = _dereq_("./finally")(Promise, tryConvertToPromise);
|
||||
var PassThroughHandlerContext =
|
||||
_dereq_("./finally")(Promise, tryConvertToPromise);
|
||||
var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER);
|
||||
var nodebackForPromise = _dereq_("./nodeback");
|
||||
var errorObj = util.errorObj;
|
||||
|
@ -2712,6 +2786,7 @@ function Promise(executor) {
|
|||
this._resolveFromExecutor(executor);
|
||||
}
|
||||
this._promiseCreated();
|
||||
this._fireEvent("promiseCreated", this);
|
||||
}
|
||||
|
||||
Promise.prototype.toString = function () {
|
||||
|
@ -2804,6 +2879,7 @@ Promise.is = function (val) {
|
|||
|
||||
Promise.fromNode = Promise.fromCallback = function(fn) {
|
||||
var ret = new Promise(INTERNAL);
|
||||
ret._captureStackTrace();
|
||||
var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs
|
||||
: false;
|
||||
var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));
|
||||
|
@ -2842,9 +2918,7 @@ Promise.setScheduler = function(fn) {
|
|||
if (typeof fn !== "function") {
|
||||
throw new TypeError("expecting a function but got " + util.classString(fn));
|
||||
}
|
||||
var prev = async._schedule;
|
||||
async._schedule = fn;
|
||||
return prev;
|
||||
return async.setScheduler(fn);
|
||||
};
|
||||
|
||||
Promise.prototype._then = function (
|
||||
|
@ -2869,6 +2943,7 @@ Promise.prototype._then = function (
|
|||
receiver = target === this ? undefined : this._boundTo;
|
||||
}
|
||||
}
|
||||
this._fireEvent("promiseChained", this, promise);
|
||||
}
|
||||
|
||||
var domain = getDomain();
|
||||
|
@ -2921,14 +2996,17 @@ Promise.prototype._setLength = function (len) {
|
|||
|
||||
Promise.prototype._setFulfilled = function () {
|
||||
this._bitField = this._bitField | 33554432;
|
||||
this._fireEvent("promiseFulfilled", this);
|
||||
};
|
||||
|
||||
Promise.prototype._setRejected = function () {
|
||||
this._bitField = this._bitField | 16777216;
|
||||
this._fireEvent("promiseRejected", this);
|
||||
};
|
||||
|
||||
Promise.prototype._setFollowing = function () {
|
||||
this._bitField = this._bitField | 67108864;
|
||||
this._fireEvent("promiseResolved", this);
|
||||
};
|
||||
|
||||
Promise.prototype._setIsFinal = function () {
|
||||
|
@ -2945,9 +3023,11 @@ Promise.prototype._unsetCancelled = function() {
|
|||
|
||||
Promise.prototype._setCancelled = function() {
|
||||
this._bitField = this._bitField | 65536;
|
||||
this._fireEvent("promiseCancelled", this);
|
||||
};
|
||||
|
||||
Promise.prototype._setAsyncGuaranteed = function() {
|
||||
if (async.hasCustomScheduler()) return;
|
||||
this._bitField = this._bitField | 134217728;
|
||||
};
|
||||
|
||||
|
@ -3054,6 +3134,12 @@ Promise.prototype._resolveCallback = function(value, shouldBind) {
|
|||
if (shouldBind) this._propagateFrom(maybePromise, 2);
|
||||
|
||||
var promise = maybePromise._target();
|
||||
|
||||
if (promise === this) {
|
||||
this._reject(makeSelfResolutionError());
|
||||
return;
|
||||
}
|
||||
|
||||
var bitField = promise._bitField;
|
||||
if (((bitField & 50397184) === 0)) {
|
||||
var len = this._length();
|
||||
|
@ -3130,9 +3216,8 @@ Promise.prototype._settlePromiseFromHandler = function (
|
|||
|
||||
if (x === NEXT_FILTER) {
|
||||
promise._reject(value);
|
||||
} else if (x === errorObj || x === promise) {
|
||||
var err = x === promise ? makeSelfResolutionError() : x.e;
|
||||
promise._rejectCallback(err, false);
|
||||
} else if (x === errorObj) {
|
||||
promise._rejectCallback(x.e, false);
|
||||
} else {
|
||||
debug.checkForgottenReturns(x, promiseCreated, "", promise, this);
|
||||
promise._resolveCallback(x);
|
||||
|
@ -3160,7 +3245,8 @@ Promise.prototype._settlePromise = function(promise, handler, receiver, value) {
|
|||
if (((bitField & 65536) !== 0)) {
|
||||
if (isPromise) promise._invokeInternalOnCancel();
|
||||
|
||||
if (handler === finallyHandler) {
|
||||
if (receiver instanceof PassThroughHandlerContext &&
|
||||
receiver.isFinallyHandler()) {
|
||||
receiver.cancelPromise = promise;
|
||||
if (tryCatch(handler).call(receiver, value) === errorObj) {
|
||||
promise._reject(errorObj.e);
|
||||
|
@ -3266,11 +3352,7 @@ Promise.prototype._reject = function (reason) {
|
|||
}
|
||||
|
||||
if ((bitField & 65535) > 0) {
|
||||
if (((bitField & 134217728) !== 0)) {
|
||||
this._settlePromises();
|
||||
} else {
|
||||
async.settlePromises(this);
|
||||
}
|
||||
async.settlePromises(this);
|
||||
} else {
|
||||
this._ensurePossibleRejectionHandled();
|
||||
}
|
||||
|
@ -3351,20 +3433,20 @@ _dereq_("./join")(
|
|||
Promise, PromiseArray, tryConvertToPromise, INTERNAL, debug);
|
||||
Promise.Promise = Promise;
|
||||
_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
|
||||
_dereq_('./call_get.js')(Promise);
|
||||
_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);
|
||||
_dereq_('./timers.js')(Promise, INTERNAL);
|
||||
_dereq_('./timers.js')(Promise, INTERNAL, debug);
|
||||
_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);
|
||||
_dereq_('./nodeify.js')(Promise);
|
||||
_dereq_('./call_get.js')(Promise);
|
||||
_dereq_('./promisify.js')(Promise, INTERNAL);
|
||||
_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);
|
||||
_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);
|
||||
_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
|
||||
_dereq_('./settle.js')(Promise, PromiseArray, debug);
|
||||
_dereq_('./some.js')(Promise, PromiseArray, apiRejection);
|
||||
_dereq_('./promisify.js')(Promise, INTERNAL);
|
||||
_dereq_('./any.js')(Promise);
|
||||
_dereq_('./each.js')(Promise, INTERNAL);
|
||||
_dereq_('./filter.js')(Promise, INTERNAL);
|
||||
_dereq_('./each.js')(Promise, INTERNAL);
|
||||
_dereq_('./any.js')(Promise);
|
||||
|
||||
util.toFastProperties(Promise);
|
||||
util.toFastProperties(Promise.prototype);
|
||||
|
@ -4326,12 +4408,18 @@ var schedule;
|
|||
var noAsyncScheduler = function() {
|
||||
throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
|
||||
};
|
||||
var NativePromise = util.getNativePromise();
|
||||
if (util.isNode && typeof MutationObserver === "undefined") {
|
||||
var GlobalSetImmediate = global.setImmediate;
|
||||
var ProcessNextTick = process.nextTick;
|
||||
schedule = util.isRecentNode
|
||||
? function(fn) { GlobalSetImmediate.call(global, fn); }
|
||||
: function(fn) { ProcessNextTick.call(process, fn); };
|
||||
} else if (typeof NativePromise === "function") {
|
||||
var nativePromise = NativePromise.resolve();
|
||||
schedule = function(fn) {
|
||||
nativePromise.then(fn);
|
||||
};
|
||||
} else if ((typeof MutationObserver !== "undefined") &&
|
||||
!(typeof window !== "undefined" &&
|
||||
window.navigator &&
|
||||
|
@ -4343,23 +4431,23 @@ if (util.isNode && typeof MutationObserver === "undefined") {
|
|||
var div2 = document.createElement("div");
|
||||
var o2 = new MutationObserver(function() {
|
||||
div.classList.toggle("foo");
|
||||
toggleScheduled = false;
|
||||
toggleScheduled = false;
|
||||
});
|
||||
o2.observe(div2, opts);
|
||||
|
||||
var scheduleToggle = function() {
|
||||
if (toggleScheduled) return;
|
||||
toggleScheduled = true;
|
||||
div2.classList.toggle("foo");
|
||||
};
|
||||
toggleScheduled = true;
|
||||
div2.classList.toggle("foo");
|
||||
};
|
||||
|
||||
return function schedule(fn) {
|
||||
var o = new MutationObserver(function() {
|
||||
o.disconnect();
|
||||
fn();
|
||||
});
|
||||
o.observe(div, opts);
|
||||
scheduleToggle();
|
||||
return function schedule(fn) {
|
||||
var o = new MutationObserver(function() {
|
||||
o.disconnect();
|
||||
fn();
|
||||
});
|
||||
o.observe(div, opts);
|
||||
scheduleToggle();
|
||||
};
|
||||
})();
|
||||
} else if (typeof setImmediate !== "undefined") {
|
||||
|
@ -4754,12 +4842,44 @@ return tryConvertToPromise;
|
|||
|
||||
},{"./util":36}],34:[function(_dereq_,module,exports){
|
||||
"use strict";
|
||||
module.exports = function(Promise, INTERNAL) {
|
||||
module.exports = function(Promise, INTERNAL, debug) {
|
||||
var util = _dereq_("./util");
|
||||
var TimeoutError = Promise.TimeoutError;
|
||||
|
||||
function HandleWrapper(handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
HandleWrapper.prototype._resultCancelled = function() {
|
||||
clearTimeout(this.handle);
|
||||
};
|
||||
|
||||
var afterValue = function(value) { return delay(+this).thenReturn(value); };
|
||||
var delay = Promise.delay = function (ms, value) {
|
||||
var ret;
|
||||
var handle;
|
||||
if (value !== undefined) {
|
||||
ret = Promise.resolve(value)
|
||||
._then(afterValue, null, null, ms, undefined);
|
||||
if (debug.cancellation() && value instanceof Promise) {
|
||||
ret._setOnCancel(value);
|
||||
}
|
||||
} else {
|
||||
ret = new Promise(INTERNAL);
|
||||
handle = setTimeout(function() { ret._fulfill(); }, +ms);
|
||||
if (debug.cancellation()) {
|
||||
ret._setOnCancel(new HandleWrapper(handle));
|
||||
}
|
||||
}
|
||||
ret._setAsyncGuaranteed();
|
||||
return ret;
|
||||
};
|
||||
|
||||
Promise.prototype.delay = function (ms) {
|
||||
return delay(ms, this);
|
||||
};
|
||||
|
||||
var afterTimeout = function (promise, message, parent) {
|
||||
if (!promise.isPending()) return;
|
||||
var err;
|
||||
if (typeof message !== "string") {
|
||||
if (message instanceof Error) {
|
||||
|
@ -4773,49 +4893,43 @@ var afterTimeout = function (promise, message, parent) {
|
|||
util.markAsOriginatingFromRejection(err);
|
||||
promise._attachExtraTrace(err);
|
||||
promise._reject(err);
|
||||
parent.cancel();
|
||||
};
|
||||
|
||||
var afterValue = function(value) { return delay(+this).thenReturn(value); };
|
||||
var delay = Promise.delay = function (ms, value) {
|
||||
var ret;
|
||||
if (value !== undefined) {
|
||||
ret = Promise.resolve(value)
|
||||
._then(afterValue, null, null, ms, undefined);
|
||||
} else {
|
||||
ret = new Promise(INTERNAL);
|
||||
setTimeout(function() { ret._fulfill(); }, +ms);
|
||||
if (parent != null) {
|
||||
parent.cancel();
|
||||
}
|
||||
ret._setAsyncGuaranteed();
|
||||
return ret;
|
||||
};
|
||||
|
||||
Promise.prototype.delay = function (ms) {
|
||||
return delay(ms, this);
|
||||
};
|
||||
|
||||
function successClear(value) {
|
||||
var handle = this;
|
||||
if (handle instanceof Number) handle = +handle;
|
||||
clearTimeout(handle);
|
||||
clearTimeout(this.handle);
|
||||
return value;
|
||||
}
|
||||
|
||||
function failureClear(reason) {
|
||||
var handle = this;
|
||||
if (handle instanceof Number) handle = +handle;
|
||||
clearTimeout(handle);
|
||||
clearTimeout(this.handle);
|
||||
throw reason;
|
||||
}
|
||||
|
||||
Promise.prototype.timeout = function (ms, message) {
|
||||
ms = +ms;
|
||||
var parent = this.then();
|
||||
var ret = parent.then();
|
||||
var handle = setTimeout(function timeoutTimeout() {
|
||||
afterTimeout(ret, message, parent);
|
||||
}, ms);
|
||||
return ret._then(successClear, failureClear, undefined, handle, undefined);
|
||||
var ret, parent;
|
||||
|
||||
var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
|
||||
if (ret.isPending()) {
|
||||
afterTimeout(ret, message, parent);
|
||||
}
|
||||
}, ms));
|
||||
|
||||
if (debug.cancellation()) {
|
||||
parent = this.then();
|
||||
ret = parent._then(successClear, failureClear,
|
||||
undefined, handleWrapper, undefined);
|
||||
ret._setOnCancel(handleWrapper);
|
||||
} else {
|
||||
ret = this._then(successClear, failureClear,
|
||||
undefined, handleWrapper, undefined);
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -5054,6 +5168,11 @@ var canEvaluate = typeof navigator == "undefined";
|
|||
|
||||
var errorObj = {e: {}};
|
||||
var tryCatchTarget;
|
||||
var globalObject = typeof self !== "undefined" ? self :
|
||||
typeof window !== "undefined" ? window :
|
||||
typeof global !== "undefined" ? global :
|
||||
this !== undefined ? this : null;
|
||||
|
||||
function tryCatcher() {
|
||||
try {
|
||||
var target = tryCatchTarget;
|
||||
|
@ -5267,6 +5386,13 @@ function safeToString(obj) {
|
|||
}
|
||||
}
|
||||
|
||||
function isError(obj) {
|
||||
return obj !== null &&
|
||||
typeof obj === "object" &&
|
||||
typeof obj.message === "string" &&
|
||||
typeof obj.name === "string";
|
||||
}
|
||||
|
||||
function markAsOriginatingFromRejection(e) {
|
||||
try {
|
||||
notEnumerableProp(e, "isOperational", true);
|
||||
|
@ -5281,7 +5407,7 @@ function originatesFromRejection(e) {
|
|||
}
|
||||
|
||||
function canAttachTrace(obj) {
|
||||
return obj instanceof Error && es5.propertyIsWritable(obj, "stack");
|
||||
return isError(obj) && es5.propertyIsWritable(obj, "stack");
|
||||
}
|
||||
|
||||
var ensureErrorObject = (function() {
|
||||
|
@ -5352,6 +5478,17 @@ function env(key, def) {
|
|||
return isNode ? process.env[key] : def;
|
||||
}
|
||||
|
||||
function getNativePromise() {
|
||||
if (typeof Promise === "function") {
|
||||
try {
|
||||
var promise = new Promise(function(){});
|
||||
if ({}.toString.call(promise) === "[object Promise]") {
|
||||
return Promise;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
var ret = {
|
||||
isClass: isClass,
|
||||
isIdentifier: isIdentifier,
|
||||
|
@ -5363,6 +5500,7 @@ var ret = {
|
|||
notEnumerableProp: notEnumerableProp,
|
||||
isPrimitive: isPrimitive,
|
||||
isObject: isObject,
|
||||
isError: isError,
|
||||
canEvaluate: canEvaluate,
|
||||
errorObj: errorObj,
|
||||
tryCatch: tryCatch,
|
||||
|
@ -5381,7 +5519,9 @@ var ret = {
|
|||
hasDevTools: typeof chrome !== "undefined" && chrome &&
|
||||
typeof chrome.loadTimes === "function",
|
||||
isNode: isNode,
|
||||
env: env
|
||||
env: env,
|
||||
global: globalObject,
|
||||
getNativePromise: getNativePromise
|
||||
};
|
||||
ret.isRecentNode = ret.isNode && (function() {
|
||||
var version = process.versions.node.split(".").map(Number);
|
||||
|
|
Loading…
Add table
Reference in a new issue