Skip to content

Commit 89255fe

Browse files
authored
use queueMicrotask instead of setTimeout in browsers in order to avoid browser throttling (#1761)
1 parent c243b0e commit 89255fe

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lib/internal/setImmediate.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
/* istanbul ignore file */
33

4+
export var hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;
45
export var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
56
export var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';
67

@@ -14,7 +15,9 @@ export function wrap(defer) {
1415

1516
var _defer;
1617

17-
if (hasSetImmediate) {
18+
if (hasQueueMicrotask) {
19+
_defer = queueMicrotask;
20+
} else if (hasSetImmediate) {
1821
_defer = setImmediate;
1922
} else if (hasNextTick) {
2023
_defer = process.nextTick;

test/cargoQueue.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ describe('cargoQueue', () => {
7676
var call_order = [];
7777
var c = async.cargoQueue(worker.bind({ call_order }), 2, 2);
7878
c.push(1);
79-
setImmediate(() => {
79+
async.setImmediate(() => {
8080
c.push(2);
81-
setImmediate(() => {
81+
async.setImmediate(() => {
8282
c.push(3);
8383
c.push(4);
84-
setImmediate(() => {
84+
async.setImmediate(() => {
8585
c.push(5);
8686
c.drain(() => {
8787
expect(call_order).to.eql([

0 commit comments

Comments
 (0)