summaryrefslogtreecommitdiff
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
parentfb79cab9f89a99672a304c9afaa9dd8dcaa2bdb9 (diff)
downloadasync-7f54eec0736d28105d5a55a02e233d1a48db0f67.tar.gz
fix: don't completely flatten arrays pushed to queue/cargo. Fixes #1645
-rw-r--r--lib/internal/queue.js22
-rw-r--r--test/queue.js20
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();
});