/script-kiddie/002_script_kiddie/script-kiddie/node_modules/bluebird/js/release/timers.js |
@@ -0,0 +1,93 @@ |
"use strict"; |
module.exports = function(Promise, INTERNAL, debug) { |
var util = require("./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._captureStackTrace(); |
} |
ret._setAsyncGuaranteed(); |
return ret; |
}; |
|
Promise.prototype.delay = function (ms) { |
return delay(ms, this); |
}; |
|
var afterTimeout = function (promise, message, parent) { |
var err; |
if (typeof message !== "string") { |
if (message instanceof Error) { |
err = message; |
} else { |
err = new TimeoutError("operation timed out"); |
} |
} else { |
err = new TimeoutError(message); |
} |
util.markAsOriginatingFromRejection(err); |
promise._attachExtraTrace(err); |
promise._reject(err); |
|
if (parent != null) { |
parent.cancel(); |
} |
}; |
|
function successClear(value) { |
clearTimeout(this.handle); |
return value; |
} |
|
function failureClear(reason) { |
clearTimeout(this.handle); |
throw reason; |
} |
|
Promise.prototype.timeout = function (ms, message) { |
ms = +ms; |
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; |
}; |
|
}; |