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.
28 lines
685 B
28 lines
685 B
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() {}
|
|
|