summaryrefslogtreecommitdiff
path: root/lib/internal/queue.js
diff options
context:
space:
mode:
authorAlexander Early <alex@npmjs.com>2019-05-24 11:20:56 -0700
committerAlexander Early <alex@npmjs.com>2019-05-24 11:20:56 -0700
commit7f54eec0736d28105d5a55a02e233d1a48db0f67 (patch)
tree11df8e76f5dadb7473dbe0c6d0b7e1061a7e26ee /lib/internal/queue.js
parentfb79cab9f89a99672a304c9afaa9dd8dcaa2bdb9 (diff)
downloadasync-7f54eec0736d28105d5a55a02e233d1a48db0f67.tar.gz
fix: don't completely flatten arrays pushed to queue/cargo. Fixes #1645
Diffstat (limited to 'lib/internal/queue.js')
-rw-r--r--lib/internal/queue.js22
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 0db96a8..01567aa 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -50,14 +50,10 @@ export default function queue(worker, concurrency, payload) {
throw new Error('task callback must be a function');
}
q.started = true;
- if (Array.isArray(data)) {
- if (data.length === 0 && q.idle()) {
- // call drain immediately if there are no tasks
- return setImmediate(() => trigger('drain'));
- }
+ /*if (Array.isArray(data)) {
return data.map(datum => _insert(datum, insertAtFront, callback));
- }
+ }*/
var res;
@@ -151,6 +147,13 @@ export default function queue(worker, concurrency, payload) {
started: false,
paused: false,
push (data, callback) {
+ if (Array.isArray(data)) {
+ if (data.length === 0 && q.idle()) {
+ // call drain immediately if there are no tasks
+ return setImmediate(() => trigger('drain'));
+ }
+ return data.map(datum => _insert(datum, false, callback))
+ }
return _insert(data, false, callback);
},
kill () {
@@ -158,6 +161,13 @@ export default function queue(worker, concurrency, payload) {
q._tasks.empty();
},
unshift (data, callback) {
+ if (Array.isArray(data)) {
+ if (data.length === 0 && q.idle()) {
+ // call drain immediately if there are no tasks
+ return setImmediate(() => trigger('drain'));
+ }
+ return data.map(datum => _insert(datum, true, callback))
+ }
return _insert(data, true, callback);
},
remove (testFn) {