happy-dom 11.0.2 → 11.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/cjs/async-task-manager/AsyncTaskManager.cjs +53 -33
- package/cjs/async-task-manager/AsyncTaskManager.cjs.map +1 -1
- package/cjs/async-task-manager/AsyncTaskManager.d.ts +8 -2
- package/cjs/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
- package/lib/async-task-manager/AsyncTaskManager.d.ts +8 -2
- package/lib/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
- package/lib/async-task-manager/AsyncTaskManager.js +53 -33
- package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
- package/package.json +1 -1
- package/src/async-task-manager/AsyncTaskManager.ts +56 -37
@@ -7,7 +7,7 @@ class AsyncTaskManager {
|
|
7
7
|
constructor() {
|
8
8
|
this.runningTasks = {};
|
9
9
|
this.runningTimers = [];
|
10
|
-
this.
|
10
|
+
this.callbacks = [];
|
11
11
|
}
|
12
12
|
/**
|
13
13
|
* Returns a promise that is fulfilled when async tasks are complete.
|
@@ -15,13 +15,10 @@ class AsyncTaskManager {
|
|
15
15
|
*
|
16
16
|
* @returns Promise.
|
17
17
|
*/
|
18
|
-
|
19
|
-
return new Promise((resolve
|
20
|
-
|
21
|
-
|
22
|
-
}, 0);
|
23
|
-
this.startTimer(timerID);
|
24
|
-
this.queue.push({ resolve, reject });
|
18
|
+
whenComplete() {
|
19
|
+
return new Promise((resolve) => {
|
20
|
+
this.callbacks.push(resolve);
|
21
|
+
this.endTask(null);
|
25
22
|
});
|
26
23
|
}
|
27
24
|
/**
|
@@ -29,27 +26,8 @@ class AsyncTaskManager {
|
|
29
26
|
*
|
30
27
|
* @param [error] Error.
|
31
28
|
*/
|
32
|
-
cancelAll(
|
33
|
-
|
34
|
-
const runningTasks = this.runningTasks;
|
35
|
-
const promises = this.queue;
|
36
|
-
this.runningTasks = {};
|
37
|
-
this.runningTimers = [];
|
38
|
-
this.queue = [];
|
39
|
-
for (const timer of runningTimers) {
|
40
|
-
global.clearTimeout(timer);
|
41
|
-
}
|
42
|
-
for (const key of Object.keys(runningTasks)) {
|
43
|
-
runningTasks[key]();
|
44
|
-
}
|
45
|
-
for (const promise of promises) {
|
46
|
-
if (error) {
|
47
|
-
promise.reject(error);
|
48
|
-
}
|
49
|
-
else {
|
50
|
-
promise.resolve();
|
51
|
-
}
|
52
|
-
}
|
29
|
+
cancelAll() {
|
30
|
+
this.endAll(true);
|
53
31
|
}
|
54
32
|
/**
|
55
33
|
* Starts a timer.
|
@@ -70,7 +48,7 @@ class AsyncTaskManager {
|
|
70
48
|
this.runningTimers.splice(index, 1);
|
71
49
|
}
|
72
50
|
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
73
|
-
this.
|
51
|
+
this.endAll();
|
74
52
|
}
|
75
53
|
}
|
76
54
|
/**
|
@@ -92,9 +70,9 @@ class AsyncTaskManager {
|
|
92
70
|
endTask(taskID) {
|
93
71
|
if (this.runningTasks[taskID]) {
|
94
72
|
delete this.runningTasks[taskID];
|
95
|
-
|
96
|
-
|
97
|
-
|
73
|
+
}
|
74
|
+
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
75
|
+
this.endAll();
|
98
76
|
}
|
99
77
|
}
|
100
78
|
/**
|
@@ -114,6 +92,48 @@ class AsyncTaskManager {
|
|
114
92
|
this.constructor.taskID++;
|
115
93
|
return this.constructor.taskID;
|
116
94
|
}
|
95
|
+
/**
|
96
|
+
* Ends all tasks.
|
97
|
+
*
|
98
|
+
* @param [canceled] Canceled.
|
99
|
+
*/
|
100
|
+
endAll(canceled) {
|
101
|
+
const runningTimers = this.runningTimers;
|
102
|
+
const runningTasks = this.runningTasks;
|
103
|
+
this.runningTasks = {};
|
104
|
+
this.runningTimers = [];
|
105
|
+
for (const timer of runningTimers) {
|
106
|
+
global.clearTimeout(timer);
|
107
|
+
}
|
108
|
+
for (const key of Object.keys(runningTasks)) {
|
109
|
+
runningTasks[key]();
|
110
|
+
}
|
111
|
+
if (this.callbacks.length) {
|
112
|
+
if (canceled) {
|
113
|
+
const callbacks = this.callbacks;
|
114
|
+
this.callbacks = [];
|
115
|
+
for (const callback of callbacks) {
|
116
|
+
callback();
|
117
|
+
}
|
118
|
+
}
|
119
|
+
else {
|
120
|
+
const timerID = global.setTimeout(() => {
|
121
|
+
if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
|
122
|
+
const callbacks = this.callbacks;
|
123
|
+
this.callbacks = [];
|
124
|
+
this.runningTimers = [];
|
125
|
+
for (const callback of callbacks) {
|
126
|
+
callback();
|
127
|
+
}
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
this.endTimer(timerID);
|
131
|
+
}
|
132
|
+
});
|
133
|
+
this.startTimer(timerID);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
117
137
|
}
|
118
138
|
AsyncTaskManager.taskID = 0;
|
119
139
|
exports.default = AsyncTaskManager;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AsyncTaskManager.cjs","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,gBAAgB;IAArC;QAES,iBAAY,GAAgC,EAAE,CAAC;QAC/C,kBAAa,GAAqB,EAAE,CAAC;QACrC,
|
1
|
+
{"version":3,"file":"AsyncTaskManager.cjs","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
|
@@ -6,7 +6,7 @@ export default class AsyncTaskManager {
|
|
6
6
|
private static taskID;
|
7
7
|
private runningTasks;
|
8
8
|
private runningTimers;
|
9
|
-
private
|
9
|
+
private callbacks;
|
10
10
|
/**
|
11
11
|
* Returns a promise that is fulfilled when async tasks are complete.
|
12
12
|
* This method is not part of the HTML standard.
|
@@ -19,7 +19,7 @@ export default class AsyncTaskManager {
|
|
19
19
|
*
|
20
20
|
* @param [error] Error.
|
21
21
|
*/
|
22
|
-
cancelAll(
|
22
|
+
cancelAll(): void;
|
23
23
|
/**
|
24
24
|
* Starts a timer.
|
25
25
|
*
|
@@ -57,5 +57,11 @@ export default class AsyncTaskManager {
|
|
57
57
|
* @returns Task ID.
|
58
58
|
*/
|
59
59
|
private newTaskID;
|
60
|
+
/**
|
61
|
+
* Ends all tasks.
|
62
|
+
*
|
63
|
+
* @param [canceled] Canceled.
|
64
|
+
*/
|
65
|
+
private endAll;
|
60
66
|
}
|
61
67
|
//# sourceMappingURL=AsyncTaskManager.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,
|
1
|
+
{"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;;OAKG;IACI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;;;OAIG;IACI,SAAS,IAAI,IAAI;IAIxB;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,OAAO,CAAC,MAAM;CAuCd"}
|
@@ -6,7 +6,7 @@ export default class AsyncTaskManager {
|
|
6
6
|
private static taskID;
|
7
7
|
private runningTasks;
|
8
8
|
private runningTimers;
|
9
|
-
private
|
9
|
+
private callbacks;
|
10
10
|
/**
|
11
11
|
* Returns a promise that is fulfilled when async tasks are complete.
|
12
12
|
* This method is not part of the HTML standard.
|
@@ -19,7 +19,7 @@ export default class AsyncTaskManager {
|
|
19
19
|
*
|
20
20
|
* @param [error] Error.
|
21
21
|
*/
|
22
|
-
cancelAll(
|
22
|
+
cancelAll(): void;
|
23
23
|
/**
|
24
24
|
* Starts a timer.
|
25
25
|
*
|
@@ -57,5 +57,11 @@ export default class AsyncTaskManager {
|
|
57
57
|
* @returns Task ID.
|
58
58
|
*/
|
59
59
|
private newTaskID;
|
60
|
+
/**
|
61
|
+
* Ends all tasks.
|
62
|
+
*
|
63
|
+
* @param [canceled] Canceled.
|
64
|
+
*/
|
65
|
+
private endAll;
|
60
66
|
}
|
61
67
|
//# sourceMappingURL=AsyncTaskManager.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,
|
1
|
+
{"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;;OAKG;IACI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;;;OAIG;IACI,SAAS,IAAI,IAAI;IAIxB;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,OAAO,CAAC,MAAM;CAuCd"}
|
@@ -5,7 +5,7 @@ class AsyncTaskManager {
|
|
5
5
|
constructor() {
|
6
6
|
this.runningTasks = {};
|
7
7
|
this.runningTimers = [];
|
8
|
-
this.
|
8
|
+
this.callbacks = [];
|
9
9
|
}
|
10
10
|
/**
|
11
11
|
* Returns a promise that is fulfilled when async tasks are complete.
|
@@ -13,13 +13,10 @@ class AsyncTaskManager {
|
|
13
13
|
*
|
14
14
|
* @returns Promise.
|
15
15
|
*/
|
16
|
-
|
17
|
-
return new Promise((resolve
|
18
|
-
|
19
|
-
|
20
|
-
}, 0);
|
21
|
-
this.startTimer(timerID);
|
22
|
-
this.queue.push({ resolve, reject });
|
16
|
+
whenComplete() {
|
17
|
+
return new Promise((resolve) => {
|
18
|
+
this.callbacks.push(resolve);
|
19
|
+
this.endTask(null);
|
23
20
|
});
|
24
21
|
}
|
25
22
|
/**
|
@@ -27,27 +24,8 @@ class AsyncTaskManager {
|
|
27
24
|
*
|
28
25
|
* @param [error] Error.
|
29
26
|
*/
|
30
|
-
cancelAll(
|
31
|
-
|
32
|
-
const runningTasks = this.runningTasks;
|
33
|
-
const promises = this.queue;
|
34
|
-
this.runningTasks = {};
|
35
|
-
this.runningTimers = [];
|
36
|
-
this.queue = [];
|
37
|
-
for (const timer of runningTimers) {
|
38
|
-
global.clearTimeout(timer);
|
39
|
-
}
|
40
|
-
for (const key of Object.keys(runningTasks)) {
|
41
|
-
runningTasks[key]();
|
42
|
-
}
|
43
|
-
for (const promise of promises) {
|
44
|
-
if (error) {
|
45
|
-
promise.reject(error);
|
46
|
-
}
|
47
|
-
else {
|
48
|
-
promise.resolve();
|
49
|
-
}
|
50
|
-
}
|
27
|
+
cancelAll() {
|
28
|
+
this.endAll(true);
|
51
29
|
}
|
52
30
|
/**
|
53
31
|
* Starts a timer.
|
@@ -68,7 +46,7 @@ class AsyncTaskManager {
|
|
68
46
|
this.runningTimers.splice(index, 1);
|
69
47
|
}
|
70
48
|
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
71
|
-
this.
|
49
|
+
this.endAll();
|
72
50
|
}
|
73
51
|
}
|
74
52
|
/**
|
@@ -90,9 +68,9 @@ class AsyncTaskManager {
|
|
90
68
|
endTask(taskID) {
|
91
69
|
if (this.runningTasks[taskID]) {
|
92
70
|
delete this.runningTasks[taskID];
|
93
|
-
|
94
|
-
|
95
|
-
|
71
|
+
}
|
72
|
+
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
73
|
+
this.endAll();
|
96
74
|
}
|
97
75
|
}
|
98
76
|
/**
|
@@ -112,6 +90,48 @@ class AsyncTaskManager {
|
|
112
90
|
this.constructor.taskID++;
|
113
91
|
return this.constructor.taskID;
|
114
92
|
}
|
93
|
+
/**
|
94
|
+
* Ends all tasks.
|
95
|
+
*
|
96
|
+
* @param [canceled] Canceled.
|
97
|
+
*/
|
98
|
+
endAll(canceled) {
|
99
|
+
const runningTimers = this.runningTimers;
|
100
|
+
const runningTasks = this.runningTasks;
|
101
|
+
this.runningTasks = {};
|
102
|
+
this.runningTimers = [];
|
103
|
+
for (const timer of runningTimers) {
|
104
|
+
global.clearTimeout(timer);
|
105
|
+
}
|
106
|
+
for (const key of Object.keys(runningTasks)) {
|
107
|
+
runningTasks[key]();
|
108
|
+
}
|
109
|
+
if (this.callbacks.length) {
|
110
|
+
if (canceled) {
|
111
|
+
const callbacks = this.callbacks;
|
112
|
+
this.callbacks = [];
|
113
|
+
for (const callback of callbacks) {
|
114
|
+
callback();
|
115
|
+
}
|
116
|
+
}
|
117
|
+
else {
|
118
|
+
const timerID = global.setTimeout(() => {
|
119
|
+
if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
|
120
|
+
const callbacks = this.callbacks;
|
121
|
+
this.callbacks = [];
|
122
|
+
this.runningTimers = [];
|
123
|
+
for (const callback of callbacks) {
|
124
|
+
callback();
|
125
|
+
}
|
126
|
+
}
|
127
|
+
else {
|
128
|
+
this.endTimer(timerID);
|
129
|
+
}
|
130
|
+
});
|
131
|
+
this.startTimer(timerID);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
115
135
|
}
|
116
136
|
AsyncTaskManager.taskID = 0;
|
117
137
|
export default AsyncTaskManager;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AsyncTaskManager.js","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAqB,gBAAgB;IAArC;QAES,iBAAY,GAAgC,EAAE,CAAC;QAC/C,kBAAa,GAAqB,EAAE,CAAC;QACrC,
|
1
|
+
{"version":3,"file":"AsyncTaskManager.js","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -5,7 +5,7 @@ export default class AsyncTaskManager {
|
|
5
5
|
private static taskID = 0;
|
6
6
|
private runningTasks: { [k: string]: () => void } = {};
|
7
7
|
private runningTimers: NodeJS.Timeout[] = [];
|
8
|
-
private
|
8
|
+
private callbacks: Array<() => void> = [];
|
9
9
|
|
10
10
|
/**
|
11
11
|
* Returns a promise that is fulfilled when async tasks are complete.
|
@@ -13,13 +13,10 @@ export default class AsyncTaskManager {
|
|
13
13
|
*
|
14
14
|
* @returns Promise.
|
15
15
|
*/
|
16
|
-
public
|
17
|
-
return new Promise((resolve
|
18
|
-
|
19
|
-
|
20
|
-
}, 0);
|
21
|
-
this.startTimer(timerID);
|
22
|
-
this.queue.push({ resolve, reject });
|
16
|
+
public whenComplete(): Promise<void> {
|
17
|
+
return new Promise((resolve) => {
|
18
|
+
this.callbacks.push(resolve);
|
19
|
+
this.endTask(null);
|
23
20
|
});
|
24
21
|
}
|
25
22
|
|
@@ -28,30 +25,8 @@ export default class AsyncTaskManager {
|
|
28
25
|
*
|
29
26
|
* @param [error] Error.
|
30
27
|
*/
|
31
|
-
public cancelAll(
|
32
|
-
|
33
|
-
const runningTasks = this.runningTasks;
|
34
|
-
const promises = this.queue;
|
35
|
-
|
36
|
-
this.runningTasks = {};
|
37
|
-
this.runningTimers = [];
|
38
|
-
this.queue = [];
|
39
|
-
|
40
|
-
for (const timer of runningTimers) {
|
41
|
-
global.clearTimeout(timer);
|
42
|
-
}
|
43
|
-
|
44
|
-
for (const key of Object.keys(runningTasks)) {
|
45
|
-
runningTasks[key]();
|
46
|
-
}
|
47
|
-
|
48
|
-
for (const promise of promises) {
|
49
|
-
if (error) {
|
50
|
-
promise.reject(error);
|
51
|
-
} else {
|
52
|
-
promise.resolve();
|
53
|
-
}
|
54
|
-
}
|
28
|
+
public cancelAll(): void {
|
29
|
+
this.endAll(true);
|
55
30
|
}
|
56
31
|
|
57
32
|
/**
|
@@ -74,7 +49,7 @@ export default class AsyncTaskManager {
|
|
74
49
|
this.runningTimers.splice(index, 1);
|
75
50
|
}
|
76
51
|
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
77
|
-
this.
|
52
|
+
this.endAll();
|
78
53
|
}
|
79
54
|
}
|
80
55
|
|
@@ -98,10 +73,9 @@ export default class AsyncTaskManager {
|
|
98
73
|
public endTask(taskID: number): void {
|
99
74
|
if (this.runningTasks[taskID]) {
|
100
75
|
delete this.runningTasks[taskID];
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
}
|
76
|
+
}
|
77
|
+
if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
|
78
|
+
this.endAll();
|
105
79
|
}
|
106
80
|
}
|
107
81
|
|
@@ -123,4 +97,49 @@ export default class AsyncTaskManager {
|
|
123
97
|
(<typeof AsyncTaskManager>this.constructor).taskID++;
|
124
98
|
return (<typeof AsyncTaskManager>this.constructor).taskID;
|
125
99
|
}
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Ends all tasks.
|
103
|
+
*
|
104
|
+
* @param [canceled] Canceled.
|
105
|
+
*/
|
106
|
+
private endAll(canceled?: boolean): void {
|
107
|
+
const runningTimers = this.runningTimers;
|
108
|
+
const runningTasks = this.runningTasks;
|
109
|
+
|
110
|
+
this.runningTasks = {};
|
111
|
+
this.runningTimers = [];
|
112
|
+
|
113
|
+
for (const timer of runningTimers) {
|
114
|
+
global.clearTimeout(timer);
|
115
|
+
}
|
116
|
+
|
117
|
+
for (const key of Object.keys(runningTasks)) {
|
118
|
+
runningTasks[key]();
|
119
|
+
}
|
120
|
+
|
121
|
+
if (this.callbacks.length) {
|
122
|
+
if (canceled) {
|
123
|
+
const callbacks = this.callbacks;
|
124
|
+
this.callbacks = [];
|
125
|
+
for (const callback of callbacks) {
|
126
|
+
callback();
|
127
|
+
}
|
128
|
+
} else {
|
129
|
+
const timerID = global.setTimeout(() => {
|
130
|
+
if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
|
131
|
+
const callbacks = this.callbacks;
|
132
|
+
this.callbacks = [];
|
133
|
+
this.runningTimers = [];
|
134
|
+
for (const callback of callbacks) {
|
135
|
+
callback();
|
136
|
+
}
|
137
|
+
} else {
|
138
|
+
this.endTimer(timerID);
|
139
|
+
}
|
140
|
+
});
|
141
|
+
this.startTimer(timerID);
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
126
145
|
}
|