diff options
author | Alexander Early <alex@npmjs.com> | 2019-05-24 11:20:56 -0700 |
---|---|---|
committer | Alexander Early <alex@npmjs.com> | 2019-05-24 11:20:56 -0700 |
commit | 7f54eec0736d28105d5a55a02e233d1a48db0f67 (patch) | |
tree | 11df8e76f5dadb7473dbe0c6d0b7e1061a7e26ee | |
parent | fb79cab9f89a99672a304c9afaa9dd8dcaa2bdb9 (diff) | |
download | async-7f54eec0736d28105d5a55a02e233d1a48db0f67.tar.gz |
fix: don't completely flatten arrays pushed to queue/cargo. Fixes #1645
-rw-r--r-- | lib/internal/queue.js | 22 | ||||
-rw-r--r-- | test/queue.js | 20 |
2 files changed, 35 insertions, 7 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) { diff --git a/test/queue.js b/test/queue.js index 5c31116..e9f3a78 100644 --- a/test/queue.js +++ b/test/queue.js @@ -264,6 +264,24 @@ describe('queue', function(){ done(); }); + it('push with arrays', (done) => { + const tasks = [] + var q = async.queue((task, cb) => { + tasks.push(task) + cb() + }, 1); + + q.push([[1, 2, 3], [4, 5, 6]]) + + q.drain(() => { + expect(tasks).to.eql([ + [1, 2, 3], + [4, 5, 6] + ]) + done() + }) + }) + it('unshift', (done) => { var queue_order = []; @@ -607,7 +625,7 @@ describe('queue', function(){ }); expect(q.started).to.equal(false); - q.push([]); + q.push('a'); expect(q.started).to.equal(true); done(); }); |