Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81160 views
1
"use strict";
2
module.exports = function(Promise, INTERNAL) {
3
var util = require("./util.js");
4
var TimeoutError = Promise.TimeoutError;
5
6
var afterTimeout = function (promise, message) {
7
if (!promise.isPending()) return;
8
if (typeof message !== "string") {
9
message = "operation timed out";
10
}
11
var err = new TimeoutError(message);
12
util.markAsOriginatingFromRejection(err);
13
promise._attachExtraTrace(err);
14
promise._cancel(err);
15
};
16
17
var afterValue = function(value) { return delay(+this).thenReturn(value); };
18
var delay = Promise.delay = function (value, ms) {
19
if (ms === undefined) {
20
ms = value;
21
value = undefined;
22
var ret = new Promise(INTERNAL);
23
setTimeout(function() { ret._fulfill(); }, ms);
24
return ret;
25
}
26
ms = +ms;
27
return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);
28
};
29
30
Promise.prototype.delay = function (ms) {
31
return delay(this, ms);
32
};
33
34
function successClear(value) {
35
var handle = this;
36
if (handle instanceof Number) handle = +handle;
37
clearTimeout(handle);
38
return value;
39
}
40
41
function failureClear(reason) {
42
var handle = this;
43
if (handle instanceof Number) handle = +handle;
44
clearTimeout(handle);
45
throw reason;
46
}
47
48
Promise.prototype.timeout = function (ms, message) {
49
ms = +ms;
50
var ret = this.then().cancellable();
51
ret._cancellationParent = this;
52
var handle = setTimeout(function timeoutTimeout() {
53
afterTimeout(ret, message);
54
}, ms);
55
return ret._then(successClear, failureClear, undefined, handle, undefined);
56
};
57
58
};
59
60