UNPKG

1.29 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.smartTimeout = undefined;
7
8var _bluebird = require('bluebird');
9
10var _bluebird2 = _interopRequireDefault(_bluebird);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14const cancelToken = Symbol('cancel token');
15
16const timeoutRefs = new WeakSet();
17
18const pause = delay => new _bluebird2.default(r => setTimeout(r, delay));
19
20const smartTimeout = exports.smartTimeout = (fn, delay = 0, ...args) => {
21 const newToken = Symbol('cancel id');
22 const checkRun = () => {
23 if (timeoutRefs.has(newToken)) {
24 timeoutRefs.delete(newToken);
25 return fn(...args);
26 } else return false;
27 };
28 const promise = pause(delay).then(checkRun);
29 promise[cancelToken] = newToken;
30 return promise;
31};
32
33smartTimeout.cancel = promise => {
34 if (!promise || !promise[cancelToken]) return false;
35 const token = promise[cancelToken];
36 return timeoutRefs.has(token) ? timeoutRefs.delete(token) : false;
37};
38
39smartTimeout.immediate = (fn, ...args) => _bluebird2.default.resolve().then(() => fn(...args));
40
41smartTimeout.promise = (fn, delay = 0, ...args) => pause(delay).then(() => fn(...args));
42
43exports.default = smartTimeout;
44//# sourceMappingURL=smart-timeout.js.map
\No newline at end of file