UNPKG

983 BJavaScriptView Raw
1import Promise from 'bluebird';
2
3const cancelToken = Symbol('cancel token');
4
5const timeoutRefs = new WeakSet();
6
7const pause = delay => new Promise(r => setTimeout(r, delay));
8
9export const smartTimeout = (fn, delay = 0, ...args) => {
10 const newToken = Symbol('cancel id');
11 const checkRun = () => {
12 if (timeoutRefs.has(newToken)) {
13 timeoutRefs.delete(newToken);
14 return fn(...args);
15 } else return false;
16 };
17 const promise = pause(delay).then(checkRun);
18 promise[cancelToken] = newToken;
19 return promise;
20};
21
22smartTimeout.cancel = promise => {
23 if (!promise || !promise[cancelToken]) return false;
24 const token = promise[cancelToken];
25 return timeoutRefs.has(token) ? timeoutRefs.delete(token) : false;
26};
27
28smartTimeout.immediate = (fn, ...args) => Promise.resolve().then(() => fn(...args));
29
30smartTimeout.promise = (fn, delay = 0, ...args) => pause(delay).then(() => fn(...args));
31
32export default smartTimeout;
33//# sourceMappingURL=smart-timeout.js.map
\No newline at end of file