1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /**
- * Module dependencies.
- */
- var Receiver = require('./receiver')
- /**
- * Expose `async`.
- */
- module.exports = async
- /**
- * Add value to channel via node-style async function.
- *
- * @param {Function} channel
- * @param {Function|Object} fn async function or object with async method
- * @param {String} method name only if fn is an object
- * @param {mixed} args async function arguments without callback
- * @return {Function} thunk
- */
- function async(ch, fn/*, args...*/) {
- var args = [].slice.call(arguments, 2)
- var receiver = new Receiver()
- var context = null
- if (typeof fn === 'object') {
- context = fn
- fn = fn[args.shift()]
- }
- args.push(function (err, val) {
- if (arguments.length > 2) {
- val = [].slice.call(arguments, 1)
- }
- ch(err, val)(function (err) {
- receiver[err ? 'error' : 'add'](err)
- })
- })
- fn.apply(context, args)
- return function (cb) {
- receiver.callback(cb)
- }
- }
|