333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
 * 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)
  }
}