UNPKG

@newdash/newdash

Version:

javascript/typescript utility library

41 lines (40 loc) 1.35 kB
"use strict"; 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;