Node.jscallback| 使用瀑布streamasynchronousforEach嵌套循环

我迷失在callback中。 代码和期望的输出如下。 那么,什么情况是内循环不执行,应该打印@b数组= = ['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 

async.waterfall采用第二个参数:“一个可选的callback函数,一旦所有的函数完成运行”。 你的问题还不清楚,如果这打破了你想要实现的stream程,但是你可以直接调用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() 

*大卫答案帮助我。 我试图获得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 $$ ===