From 89255fe326050e80ce5394a9c00e11e9be8b1005 Mon Sep 17 00:00:00 2001 From: Garrett Jensen Date: Thu, 5 Aug 2021 16:51:32 -0600 Subject: use queueMicrotask instead of setTimeout in browsers in order to avoid browser throttling (#1761) --- lib/internal/setImmediate.js | 5 ++++- test/cargoQueue.js | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/internal/setImmediate.js b/lib/internal/setImmediate.js index 96d26d0..4ef39a0 100644 --- a/lib/internal/setImmediate.js +++ b/lib/internal/setImmediate.js @@ -1,6 +1,7 @@ 'use strict'; /* istanbul ignore file */ +export var hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask; export var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; export var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; @@ -14,7 +15,9 @@ export function wrap(defer) { var _defer; -if (hasSetImmediate) { +if (hasQueueMicrotask) { + _defer = queueMicrotask; +} else if (hasSetImmediate) { _defer = setImmediate; } else if (hasNextTick) { _defer = process.nextTick; diff --git a/test/cargoQueue.js b/test/cargoQueue.js index 46801c7..cebdaa4 100644 --- a/test/cargoQueue.js +++ b/test/cargoQueue.js @@ -76,12 +76,12 @@ describe('cargoQueue', () => { var call_order = []; var c = async.cargoQueue(worker.bind({ call_order }), 2, 2); c.push(1); - setImmediate(() => { + async.setImmediate(() => { c.push(2); - setImmediate(() => { + async.setImmediate(() => { c.push(3); c.push(4); - setImmediate(() => { + async.setImmediate(() => { c.push(5); c.drain(() => { expect(call_order).to.eql([ -- cgit v1.2.1