@@ -10,33 +10,59 @@ let is_micro_task_queued = false;
10
10
let is_idle_task_queued = false ;
11
11
12
12
/** @type {Array<() => void> } */
13
- let current_queued_micro_tasks = [ ] ;
13
+ let queued_before_microtasks = [ ] ;
14
14
/** @type {Array<() => void> } */
15
- let current_queued_idle_tasks = [ ] ;
15
+ let queued_after_microtasks = [ ] ;
16
+ /** @type {Array<() => void> } */
17
+ let queued_idle_tasks = [ ] ;
16
18
17
- function process_micro_tasks ( ) {
18
- is_micro_task_queued = false ;
19
- const tasks = current_queued_micro_tasks . slice ( ) ;
20
- current_queued_micro_tasks = [ ] ;
19
+ export function flush_before_micro_tasks ( ) {
20
+ const tasks = queued_before_microtasks . slice ( ) ;
21
+ queued_before_microtasks = [ ] ;
22
+ run_all ( tasks ) ;
23
+ }
24
+
25
+ function flush_after_micro_tasks ( ) {
26
+ const tasks = queued_after_microtasks . slice ( ) ;
27
+ queued_after_microtasks = [ ] ;
21
28
run_all ( tasks ) ;
22
29
}
23
30
31
+ function process_micro_tasks ( ) {
32
+ if ( is_micro_task_queued ) {
33
+ is_micro_task_queued = false ;
34
+ flush_before_micro_tasks ( ) ;
35
+ flush_after_micro_tasks ( ) ;
36
+ }
37
+ }
38
+
24
39
function process_idle_tasks ( ) {
25
40
is_idle_task_queued = false ;
26
- const tasks = current_queued_idle_tasks . slice ( ) ;
27
- current_queued_idle_tasks = [ ] ;
41
+ const tasks = queued_idle_tasks . slice ( ) ;
42
+ queued_idle_tasks = [ ] ;
28
43
run_all ( tasks ) ;
29
44
}
30
45
31
46
/**
32
47
* @param {() => void } fn
33
48
*/
34
- export function queue_micro_task ( fn ) {
49
+ export function queue_before_micro_task ( fn ) {
50
+ if ( ! is_micro_task_queued ) {
51
+ is_micro_task_queued = true ;
52
+ queueMicrotask ( process_micro_tasks ) ;
53
+ }
54
+ queued_before_microtasks . push ( fn ) ;
55
+ }
56
+
57
+ /**
58
+ * @param {() => void } fn
59
+ */
60
+ export function queue_after_micro_task ( fn ) {
35
61
if ( ! is_micro_task_queued ) {
36
62
is_micro_task_queued = true ;
37
63
queueMicrotask ( process_micro_tasks ) ;
38
64
}
39
- current_queued_micro_tasks . push ( fn ) ;
65
+ queued_after_microtasks . push ( fn ) ;
40
66
}
41
67
42
68
/**
@@ -47,13 +73,13 @@ export function queue_idle_task(fn) {
47
73
is_idle_task_queued = true ;
48
74
request_idle_callback ( process_idle_tasks ) ;
49
75
}
50
- current_queued_idle_tasks . push ( fn ) ;
76
+ queued_idle_tasks . push ( fn ) ;
51
77
}
52
78
53
79
/**
54
80
* Synchronously run any queued tasks.
55
81
*/
56
- export function flush_tasks ( ) {
82
+ export function flush_after_tasks ( ) {
57
83
if ( is_micro_task_queued ) {
58
84
process_micro_tasks ( ) ;
59
85
}
0 commit comments