queue-this
v1.0.0
Published
Creates a function queue for asynchronous processing
Downloads
1
Readme
Queue This
- Creates a Queue for functions & class prototypes
- Converts all functions to asynchronous
- Ideal for traffic-control (i.e. API functions & processes)
Installation
Install via NPM
npm install queue-this
Example Usage
Initializing a Queue
const Queue = require('queue-this')
let fn = str => `You input the string: ${str}`
// result: fn('test') -> "You input the string: test"
fn = new Queue(fn)
// or
fn = new Queue(str => `You input the string: ${str}`)
// result: fn('test') -> promise
// fnQueued('test').then(r -> "You input the string: test")
Working with the Queue
let fn = new Queue(str => {
return new Promise(resolve => {
setTimeout(_=>resolve(`You input the string: ${str}`), 1000)
})
})
fn('test1').then(r=>console.log(r))
fn('test2').then(r=>console.log(r))
fn('test3').then(r=>console.log(r))
fn('test4').then(r=>console.log(r))
// Result:
// 1000ms -> "You input the string: test1"
// 2000ms -> "You input the string: test2"
// 3000ms -> "You input the string: test3"
// 4000ms -> "You input the string: test4"
Adjusting the Queue Concurrency
let fn = str => return new Promise(resolve => {
setTimeout(_=>resolve(`You input the string: ${str}`), 1000)
})
// Adjust the concurrent "processing" items
fn = new Queue(fn, { maxConcurrent: 2 })
fn('test1').then(r=>console.log(r))
fn('test2').then(r=>console.log(r))
fn('test3').then(r=>console.log(r))
fn('test4').then(r=>console.log(r))
// Result:
// 1000ms -> "You input the string: test1"
// 1000ms -> "You input the string: test2"
// 2000ms -> "You input the string: test3"
// 2000ms -> "You input the string: test4"
Adjusting Resolve/Catch Behavior
// Default Behavior
let itsAnApple = str => new Promise((resolve,reject) => str === 'apple' ? resolve("it's an Apple!"):reject("Not an Apple!")))
let fn1 = new Queue(itsAnApple)
// fn1('car')
// -> Promise {<rejected>: "Not an Apple!"}
// fn1('apple')
// -> Promise {<resolved>: "it's an Apple!"}
// Catch on error
let itsAnApple = str => new Promise((resolve,reject) => resolve(str === 'apple' ? { result:"it's an Apple!" }:{ error:"Not an Apple!" }))
let fn2 = new Queue(fn, { rejectOnError:true })
// fn2('car')
// -> Promise {<rejected>: { error:"Not an Apple!" }}
// fn2('apple')
// -> Promise {<resolved>: { result:"it's an Apple!" }}
// Catch on False/Null
let itsAnApple = str => new Promise(resolve => resolve(str === 'apple' ? true:false))
let fn3 = new Queue(fn, { rejectOnFalse:true, rejectOnNull:true })
// fn3('car')
// -> Promise {<rejected>: "Not an Apple!"}
// fn3('apple')
// -> Promise {<resolved>: "it's an Apple!"}