@newdash/newdash
Version:
javascript/typescript utility library
41 lines (40 loc) • 1.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.timeout = exports.createTimeoutPromise = void 0;
const assert_1 = require("./assert");
const errors_1 = require("./assert/errors");
/**
* create a promise with timeout, if time is up but no result/error resolved by promise, will throw an error
*
* @param executor the promise executor
* @param timeout the timeout in milliseconds, e.g. 10000 means 10 seconds, and default value is 60 seconds
*
* @category Async
* @since 5.14.0
*
* @throws {TimeoutError}
*/
function createTimeoutPromise(executor, timeout = 60 * 1000) {
(0, assert_1.mustProvide)(executor, "executor", "function");
return new Promise((resolve, reject) => {
let hasTimeout = false;
const timer = setTimeout(() => {
hasTimeout = true;
reject(new errors_1.TimeoutError("Time is up."));
}, timeout);
executor((value) => {
if (!hasTimeout) {
clearInterval(timer);
resolve(value);
}
}, (error) => {
if (!hasTimeout) {
clearInterval(timer);
reject(error);
}
});
});
}
exports.createTimeoutPromise = createTimeoutPromise;
exports.timeout = createTimeoutPromise;
exports.default = exports.timeout;