prex
Version:
Async coordination primitives and extensions on top of ES6 Promises
51 lines (49 loc) • 1.69 kB
JavaScript
;
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Licensed under the Apache License, Version 2.0.
See LICENSE file in the project root for details.
***************************************************************************** */
Object.defineProperty(exports, "__esModule", { value: true });
const cancellation_1 = require("./cancellation");
const adapter_1 = require("./adapter");
/**
* Waits the specified number of milliseconds before resolving with the provided value.
*
* @param token A CancellationToken
* @param msec The number of milliseconds to wait before resolving.
* @param value An optional value for the resulting Promise.
*/
function delay(token_, msec_, value) {
let token;
let msec;
if (typeof token_ === "number") {
value = msec_;
msec = token_;
token = cancellation_1.CancellationToken.none;
}
else {
msec = msec_;
token = adapter_1.getToken(token_);
}
if (!token.canBeCanceled) {
return new Promise(resolve => setTimeout(resolve, msec, value));
}
return new Promise((resolve, reject) => {
token.throwIfCancellationRequested();
const handle = setTimeout(() => {
registration.unregister();
resolve(value);
}, msec);
const registration = token.register(() => {
clearTimeout(handle);
try {
token.throwIfCancellationRequested();
}
catch (e) {
reject(e);
}
});
});
}
exports.delay = delay;