summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett Jensen <jensen.gar@gmail.com>2021-08-05 16:51:32 -0600
committerGitHub <noreply@github.com>2021-08-05 15:51:32 -0700
commit89255fe326050e80ce5394a9c00e11e9be8b1005 (patch)
tree361aab1eea849ab93f88f3e7d1972c551dcad000
parentc243b0e9e4a21f50b573820cf0d9059524833f50 (diff)
downloadasync-89255fe326050e80ce5394a9c00e11e9be8b1005.tar.gz
use queueMicrotask instead of setTimeout in browsers in order to avoid browser throttling (#1761)
-rw-r--r--lib/internal/setImmediate.js5
-rw-r--r--test/cargoQueue.js6
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([