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.waterfall2番目の引数を取ります:「すべての関数が完了したら実行するオプションのコールバック」。これが達成しようとしているフローを壊すかどうかはあなたの質問からは明らかではありませんが、最初のタスクの最後に呼び出すのではなくcbLoop2()、2番目の引数として呼び出すことができますか?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 に答える