1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.smartTimeout = undefined;
|
7 |
|
8 | var _bluebird = require('bluebird');
|
9 |
|
10 | var _bluebird2 = _interopRequireDefault(_bluebird);
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 | const cancelToken = Symbol('cancel token');
|
15 |
|
16 | const timeoutRefs = new WeakSet();
|
17 |
|
18 | const pause = delay => new _bluebird2.default(r => setTimeout(r, delay));
|
19 |
|
20 | const 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 |
|
33 | smartTimeout.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 |
|
39 | smartTimeout.immediate = (fn, ...args) => _bluebird2.default.resolve().then(() => fn(...args));
|
40 |
|
41 | smartTimeout.promise = (fn, delay = 0, ...args) => pause(delay).then(() => fn(...args));
|
42 |
|
43 | exports.default = smartTimeout;
|
44 |
|
\ | No newline at end of file |