You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.7 KiB
127 lines
2.7 KiB
5 years ago
|
'use strict'
|
||
|
|
||
|
var nr = { results: false }
|
||
|
var fastparallel = require('fastparallel')
|
||
|
var fastseries = require('fastseries')
|
||
|
var fastfall = require('fastfall')
|
||
|
var fastq = require('fastq')
|
||
|
|
||
|
function steed (context) {
|
||
|
if (!context) {
|
||
|
context = {}
|
||
|
}
|
||
|
|
||
|
var _parNr = fastparallel(nr)
|
||
|
var _serNr = fastseries(nr)
|
||
|
var _par = fastparallel()
|
||
|
var _ser = fastseries()
|
||
|
|
||
|
context.each = each
|
||
|
context.map = map
|
||
|
context.eachSeries = eachSeries
|
||
|
context.mapSeries = mapSeries
|
||
|
context.parallel = parallel
|
||
|
context.series = series
|
||
|
context.waterfall = fastfall()
|
||
|
context.queue = fastq
|
||
|
|
||
|
return context
|
||
|
|
||
|
function each (that, array, func, cb) {
|
||
|
if (!func || typeof func === 'function' && typeof array === 'function') {
|
||
|
cb = func
|
||
|
func = array
|
||
|
array = that
|
||
|
that = null
|
||
|
}
|
||
|
_parNr(that, func, array, cb)
|
||
|
}
|
||
|
|
||
|
function eachSeries (that, array, func, cb) {
|
||
|
if (!func || typeof func === 'function' && typeof array === 'function') {
|
||
|
cb = func
|
||
|
func = array
|
||
|
array = that
|
||
|
that = null
|
||
|
}
|
||
|
_serNr(that, func, array, cb)
|
||
|
}
|
||
|
|
||
|
function map (that, array, func, cb) {
|
||
|
if (!func || typeof func === 'function' && typeof array === 'function') {
|
||
|
cb = func
|
||
|
func = array
|
||
|
array = that
|
||
|
that = null
|
||
|
}
|
||
|
_par(that, func, array, cb)
|
||
|
}
|
||
|
|
||
|
function mapSeries (that, array, func, cb) {
|
||
|
if (!func || typeof func === 'function' && typeof array === 'function') {
|
||
|
cb = func
|
||
|
func = array
|
||
|
array = that
|
||
|
that = null
|
||
|
}
|
||
|
_ser(that, func, array, cb)
|
||
|
}
|
||
|
|
||
|
function parallel (that, funcs, cb) {
|
||
|
if (!funcs || typeof funcs === 'function') {
|
||
|
cb = funcs
|
||
|
funcs = that
|
||
|
that = null
|
||
|
}
|
||
|
if (Array.isArray(funcs)) {
|
||
|
_par(that, funcs, null, cb)
|
||
|
} else {
|
||
|
_handleObjectMap(that, _par, funcs, cb)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function series (that, funcs, cb) {
|
||
|
if (!funcs || typeof funcs === 'function') {
|
||
|
cb = funcs
|
||
|
funcs = that
|
||
|
that = null
|
||
|
}
|
||
|
if (Array.isArray(funcs)) {
|
||
|
_ser(that, funcs, null, cb)
|
||
|
} else {
|
||
|
_handleObjectMap(that, _ser, funcs, cb)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _handleObjectMap (that, iterator, funcs, cb) {
|
||
|
var keys = Object.keys(funcs)
|
||
|
iterator(new MapStatus(keys, funcs, cb), callNamedFunc, keys, mapResults)
|
||
|
}
|
||
|
|
||
|
function MapStatus (keys, funcs, cb) {
|
||
|
this.cb = cb
|
||
|
this.keys = keys
|
||
|
this.funcs = funcs
|
||
|
this.results = {}
|
||
|
}
|
||
|
|
||
|
function callNamedFunc (key, cb) {
|
||
|
this.funcs[key](cb)
|
||
|
}
|
||
|
|
||
|
function mapResults (err, results) {
|
||
|
if (err) { return this.cb(err) }
|
||
|
|
||
|
var keys = this.keys
|
||
|
var toReturn = {}
|
||
|
|
||
|
for (var i = 0; i < keys.length; i++) {
|
||
|
toReturn[keys[i]] = results[i]
|
||
|
}
|
||
|
|
||
|
this.cb(null, toReturn)
|
||
|
}
|
||
|
|
||
|
module.exports = steed(steed)
|