summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2017-04-06 22:34:11 -0700
committerAlexander Early <alexander.early@gmail.com>2017-04-06 22:34:11 -0700
commit291c81138258cd22be3a9bc9b2f1990eacaba634 (patch)
tree03405c706a6a542fb395bc68844d3a63b73a5bc7
parent3dc9f8f1e120f0c95f67221ac0d1a9bac7b88cd4 (diff)
downloadasync-linked-list-methods.tar.gz
add queue.removelinked-list-methods
-rw-r--r--lib/internal/queue.js5
-rw-r--r--lib/queue.js6
-rw-r--r--mocha_test/queue.js19
3 files changed, 30 insertions, 0 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 479eaf8..87d49f4 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -102,6 +102,11 @@ export default function queue(worker, concurrency, payload) {
unshift: function (data, callback) {
_insert(data, true, callback);
},
+ remove: function (testFn) {
+ q._tasks = q._tasks.filter(function (node) {
+ return !testFn(node);
+ })
+ },
process: function () {
// Avoid trying to start too many processing operations. This can occur
// when callbacks resolve synchronously (#1267).
diff --git a/lib/queue.js b/lib/queue.js
index 906467c..2d0abb7 100644
--- a/lib/queue.js
+++ b/lib/queue.js
@@ -24,6 +24,12 @@ import wrapAsync from './internal/wrapAsync';
* task in the list. Invoke with `queue.push(task, [callback])`,
* @property {Function} unshift - add a new task to the front of the `queue`.
* Invoke with `queue.unshift(task, [callback])`.
+ * @property {Function} remove - remove items from the queue that match a test
+ * function. The test function will be passed an object with a `data` property,
+ * and a `priority` property, if this is a
+ * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.
+ * Invoked with `queue.remove(testFn)`, where `testFn` is of the form
+ * `function ({data, priority}) {}` and returns a Boolean.
* @property {Function} saturated - a callback that is called when the number of
* running workers hits the `concurrency` limit, and further tasks will be
* queued.
diff --git a/mocha_test/queue.js b/mocha_test/queue.js
index cc72c52..77d4710 100644
--- a/mocha_test/queue.js
+++ b/mocha_test/queue.js
@@ -761,5 +761,24 @@ describe('queue', function(){
q.push('foo4', function () {calls.push('foo4 cb');});
});
});
+
+ it('remove', function(done) {
+ var result = [];
+ var q = async.queue(function(data, cb) {
+ result.push(data);
+ async.setImmediate(cb);
+ });
+
+ q.push([1, 2, 3, 4, 5]);
+
+ q.remove(function (node) {
+ return node.data === 3;
+ });
+
+ q.drain = function () {
+ expect(result).to.eql([1, 2, 4, 5]);
+ done();
+ }
+ });
});