UNPKG

728 BJavaScriptView Raw
1'use strict';
2
3class CancelError extends Error {
4 constructor(message) {
5 super(message);
6 this.name = 'CancelError';
7 }
8}
9
10const createDelay = willResolve => (ms, value) => {
11 let timeoutId;
12 let internalReject;
13
14 const delayPromise = new Promise((resolve, reject) => {
15 internalReject = reject;
16
17 timeoutId = setTimeout(() => {
18 const settle = willResolve ? resolve : reject;
19 settle(value);
20 }, ms);
21 });
22
23 delayPromise.cancel = () => {
24 if (timeoutId) {
25 clearTimeout(timeoutId);
26 timeoutId = null;
27 internalReject(new CancelError('Delay canceled'));
28 }
29 };
30
31 return delayPromise;
32};
33
34module.exports = createDelay(true);
35module.exports.reject = createDelay(false);
36module.exports.CancelError = CancelError;