@xapp/arachne-utils
Version:
43 lines • 1.2 kB
JavaScript
;
/*! Copyright (c) 2020, XAPP AI */
Object.defineProperty(exports, "__esModule", { value: true });
exports.promiseWithTimeout = exports.TimeoutError = void 0;
class TimeoutError extends Error {
constructor() {
super(...arguments);
this.name = "TimeoutError";
}
}
exports.TimeoutError = TimeoutError;
/**
* Wraps the function that returns a promise with a timeout
*
* @param timeoutMs
* @param promise
* @param failureMessage
*/
const promiseWithTimeout = (timeoutMs, promise, failureMessage) => {
let timeoutHandle;
let error;
if (!failureMessage) {
error = new TimeoutError();
}
else if (typeof failureMessage === "string") {
error = new TimeoutError(failureMessage);
}
else {
error = failureMessage;
}
const timeoutPromise = new Promise((accept, reject) => {
timeoutHandle = setTimeout(() => reject(error), timeoutMs);
});
return Promise.race([
promise(),
timeoutPromise,
]).then((result) => {
clearTimeout(timeoutHandle);
return result;
});
};
exports.promiseWithTimeout = promiseWithTimeout;
//# sourceMappingURL=promiseWithTimeout.js.map