我在回调中迷失了。代码和所需的输出如下。所以发生了什么是内部循环没有被执行应该打印@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
答案 0 :(得分: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()
答案 1 :(得分: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 $$
===