1

我迷失在回调中。代码和所需的输出如下。所以发生的事情是内部循环没有执行,应该打印@b array=> ['a','b','c']

Async = require('async')

  @a = [1,2,3]
  @b = ['a','b','c']

  Async.forEachSeries @a, (aa , cbLoop1) =>
    console.log aa
    console.log "^ number from Loop-1"
    Async.forEachSeries @b, (bb , cbLoop2) =>
      #call the method below
      Async.waterfall(
          [
            (cb) ->
              #call method 'start'
              #'start' method has a callback that gets info using HTTP GET
              start bb , (error , response) ->
                  #console.log(response) or do something with response
              cbLoop2()
          ]    
      )
   cbLoop1()


   # Desired OUTPUT
   1
   ^ number from Loop-1
   a
   b
   c
   2
   ^ number from Loop-1
   a
   b
   c
   3
   ^ number from Loop-1
   a
   b
   c    
4

2 回答 2

1

async.waterfall接受第二个参数:“所有函数完成后运行的可选回调”。您的问题尚不清楚这是否会破坏您试图实现的流程,但是您是否可以将cbLoop2()其作为第二个参数waterfall调用而不是在第一个任务结束时调用它?一个简化的例子:

async = require('async')

a = [1,2,3]
b = ['a','b','c']

cb = ->

async.forEachSeries a, (item , cb) ->
  console.log item
  async.forEachSeries b, (item , cb) ->
    console.log item
    async.waterfall [], cb()
  cb()
于 2012-12-03T20:59:33.320 回答
0

*大卫的回答帮助了我。我试图掌握 Async forSeries 和瀑布语法。*欢迎任何改进意见!

Async = require('async')

class Test
  constructor: () ->
    @a1       = [1,2,3]
    @b1       = ['a','b','c']

  test: (t , callback) ->
    Async.forEachSeries @a1, (aa , cbLoop1) =>
      console.log "Value from Array @a1 - > #{aa}"
      count = 0
      Async.forEachSeries @b1, (bb , cbLoop2) =>
    cb = cbLoop2
    # console.log bb
    Async.waterfall(
      [
        (cbLoop2) ->
          count = count + 1
          t.methd1 "Value from Array @b2 - #{bb}" , (er ,response) ->
            console.log response
            cbLoop2(null , count)
        , (resp , cbLoop2) ->
          #have to do some manupulations here
          cbLoop2(null , count)
      ] , (err ,response) ->
        cbLoop2()

    )

  , (err) ->
    console.log("===")
    cbLoop1()


  methd1: (data , callback) ->
    @finalmethod "$$ #{data} $$" , callback

  finalmethod: (data, callback) ->
    setTimeout () ->
      callback(undefined , data)
    , 1500


  t = new Test()
  t.test t, t.test_cb


output
Value from Array @a1 - > 1
$$ Value from Array @b2 - a $$
$$ Value from Array @b2 - b $$
$$ Value from Array @b2 - c $$
===
Value from Array @a1 - > 2
$$ Value from Array @b2 - a $$
$$ Value from Array @b2 - b $$
$$ Value from Array @b2 - c $$
===
Value from Array @a1 - > 3
$$ Value from Array @b2 - a $$
$$ Value from Array @b2 - b $$
$$ Value from Array @b2 - c $$
===
于 2012-12-04T03:52:48.473 回答