|
|
1 ano atrás | |
|---|---|---|
| .. | ||
| LICENSE | 1 ano atrás | |
| index.d.ts | 1 ano atrás | |
| index.js | 1 ano atrás | |
| package.json | 1 ano atrás | |
| readme.md | 1 ano atrás | |
____ __ _____ __ _____
/ __ `/ / / / _ \/ / / / _ \
/ /_/ / /_/ / __/ /_/ / __/
\__, /\__,_/\___/\__,_/\___/
/_/
Asynchronous function queue with adjustable concurrency.
This module exports a class Queue that implements most of the Array API. Pass async functions (ones that accept a callback or return a promise) to an instance's additive array methods. Processing begins when you call q.start().
npm run example
var queue = require('../')
var q = queue({ results: [] })
// add jobs using the familiar Array API
q.push(function (cb) {
const result = 'two'
cb(null, result)
})
q.push(
function (cb) {
const result = 'four'
cb(null, result)
},
function (cb) {
const result = 'five'
cb(null, result)
}
)
// jobs can accept a callback or return a promise
q.push(function () {
return new Promise(function (resolve, reject) {
const result = 'one'
resolve(result)
})
})
q.unshift(function (cb) {
const result = 'one'
cb(null, result)
})
q.splice(2, 0, function (cb) {
const result = 'three'
cb(null, result)
})
// use the timeout feature to deal with jobs that
// take too long or forget to execute a callback
q.timeout = 100
q.on('timeout', function (next, job) {
console.log('job timed out:', job.toString().replace(/\n/g, ''))
next()
})
q.push(function (cb) {
setTimeout(function () {
console.log('slow job finished')
cb()
}, 200)
})
q.push(function (cb) {
console.log('forgot to execute callback')
})
// jobs can also override the queue's timeout
// on a per-job basis
function extraSlowJob (cb) {
setTimeout(function () {
console.log('extra slow job finished')
cb()
}, 400)
}
extraSlowJob.timeout = 500
q.push(extraSlowJob)
// jobs can also opt-out of the timeout altogether
function superSlowJob (cb) {
setTimeout(function () {
console.log('super slow job finished')
cb()
}, 1000)
}
superSlowJob.timeout = null
q.push(superSlowJob)
// get notified when jobs complete
q.on('success', function (result, job) {
console.log('job finished processing:', job.toString().replace(/\n/g, ''))
console.log('The result is:', result)
})
// begin processing, get notified on end / failure
q.start(function (err) {
if (err) throw err
console.log('all done:', q.results)
})
npm install queue
Note: You may need to install the events dependency if
your environment does not have it by default (eg. browser, react-native).
npm test
npm run test-browser
var q = queue([opts])Constructor. opts may contain inital values for:
q.concurrencyq.timeoutq.autostartq.resultsq.start([cb])cb, if passed, will be called when the queue empties or when an error occurs.
q.stop()Stops the queue. can be resumed with q.start().
q.end([err])Stop and empty the queue immediately.
ArrayMozilla has docs on how these methods work here. Note that slice does not copy the queue.
q.push(element1, ..., elementN)q.unshift(element1, ..., elementN)q.splice(index , howMany[, element1[, ...[, elementN]]])q.pop()q.shift()q.slice(begin[, end])q.reverse()q.indexOf(searchElement[, fromIndex])q.lastIndexOf(searchElement[, fromIndex])q.concurrencyMax number of jobs the queue should process concurrently, defaults to Infinity.
q.timeoutMilliseconds to wait for a job to execute its callback. This can be overridden by specifying a timeout property on a per-job basis.
q.autostartEnsures the queue is always running if jobs are available. Useful in situations where you are using a queue only for concurrency control.
q.resultsAn array to set job callback arguments on.
q.lengthJobs pending + jobs to process (readonly).
q.emit('start', job)Immediately before a job begins to execute.
q.emit('success', result, job)After a job executes its callback.
q.emit('error', err, job)After a job passes an error to its callback.
q.emit('timeout', continue, job)After q.timeout milliseconds have elapsed and a job has not executed its callback.
q.emit('end'[, err])After all jobs have been processed
The latest stable release is published to npm. Abbreviated changelog below:
start event before job begins (@joelgriffith)timeout property on a job to override the queue's timeout (@joelgriffith)Infinityq.start() to accept an optional callback executed on q.emit('end')Copyright © 2014 Jesse Tane jesse.tane@gmail.com
This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See LICENSE for full details.