29 lines
685 B
JavaScript
29 lines
685 B
JavaScript
|
module.exports = after
|
||
|
|
||
|
function after(count, callback, err_cb) {
|
||
|
var bail = false
|
||
|
err_cb = err_cb || noop
|
||
|
proxy.count = count
|
||
|
|
||
|
return (count === 0) ? callback() : proxy
|
||
|
|
||
|
function proxy(err, result) {
|
||
|
if (proxy.count <= 0) {
|
||
|
throw new Error('after called too many times')
|
||
|
}
|
||
|
--proxy.count
|
||
|
|
||
|
// after first error, rest are passed to err_cb
|
||
|
if (err) {
|
||
|
bail = true
|
||
|
callback(err)
|
||
|
// future error callbacks will go to error handler
|
||
|
callback = err_cb
|
||
|
} else if (proxy.count === 0 && !bail) {
|
||
|
callback(null, result)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function noop() {}
|