Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add cargoQueue type and tests (#1567)
* Add cargo queue type and tests * remove only on tests * make failing test more deterministic * Dont define a new type
- Loading branch information
1 parent
50939d7
commit db49b89
Showing
4 changed files
with
2,037 additions
and
1,642 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
import queue from './internal/queue'; | ||
|
||
/** | ||
* Creates a `cargoQueue` object with the specified payload. Tasks added to the | ||
* cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers. | ||
* If the all `workers` are in progress, the task is queued until one becomes available. Once | ||
* a `worker` has completed some tasks, each callback of those tasks is | ||
* called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) | ||
* for how `cargo` and `queue` work. | ||
* | ||
* While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers | ||
* at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker, | ||
* the cargoQueue passes an array of tasks to multiple parallel workers. | ||
* | ||
* @name cargoQueue | ||
* @static | ||
* @memberOf module:ControlFlow | ||
* @method | ||
* @see [async.queue]{@link module:ControlFlow.queue} | ||
* @see [async.cargo]{@link module:ControlFLow.cargo} | ||
* @category Control Flow | ||
* @param {AsyncFunction} worker - An asynchronous function for processing an array | ||
* of queued tasks. Invoked with `(tasks, callback)`. | ||
* @param {number} [concurrency=1] - An `integer` for determining how many | ||
* `worker` functions should be run in parallel. If omitted, the concurrency | ||
* defaults to `1`. If the concurrency is `0`, an error is thrown. | ||
* @param {number} [payload=Infinity] - An optional `integer` for determining | ||
* how many tasks should be processed per round; if omitted, the default is | ||
* unlimited. | ||
* @returns {module:ControlFlow.CargoObject} A cargoQueue object to manage the tasks. Callbacks can | ||
* attached as certain properties to listen for specific events during the | ||
* lifecycle of the cargoQueue and inner queue. | ||
* @example | ||
* | ||
* // create a cargoQueue object with payload 2 and concurrency 2 | ||
* var cargoQueue = async.cargoQueue(function(tasks, callback) { | ||
* for (var i=0; i<tasks.length; i++) { | ||
* console.log('hello ' + tasks[i].name); | ||
* } | ||
* callback(); | ||
* }, 2, 2); | ||
* | ||
* // add some items | ||
* cargoQueue.push({name: 'foo'}, function(err) { | ||
* console.log('finished processing foo'); | ||
* }); | ||
* cargoQueue.push({name: 'bar'}, function(err) { | ||
* console.log('finished processing bar'); | ||
* }); | ||
* cargoQueue.push({name: 'baz'}, function(err) { | ||
* console.log('finished processing baz'); | ||
* }); | ||
* cargoQueue.push({name: 'boo'}, function(err) { | ||
* console.log('finished processing boo'); | ||
* }); | ||
*/ | ||
export default function cargo(worker, concurrency, payload) { | ||
return queue(worker, concurrency, payload); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.