19 lines
392 B
JavaScript
19 lines
392 B
JavaScript
import TimeoutError from "./TimeoutError.js";
|
|
import delay from "./delay.js";
|
|
|
|
export default function timeout(promise, ms) {
|
|
const promiseDelay = delay(ms);
|
|
|
|
function cancelDelay() {
|
|
clearTimeout(promiseDelay.timeout);
|
|
}
|
|
|
|
const error = new TimeoutError();
|
|
return Promise.race([
|
|
promise.finally(cancelDelay),
|
|
promiseDelay.then(() => {
|
|
throw error;
|
|
}),
|
|
]);
|
|
}
|