Node.js的回调|异步的forEach嵌套循环瀑布流 [英] Node.js Callbacks | Async forEach nested loop with waterfall flow
本文介绍了Node.js的回调|异步的forEach嵌套循环瀑布流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我丢在了回调。 code和所需的输出如下。那么,什么情况是内循环不执行应打印@b数组=> ['一','B','C']
异步=要求(异步) @a = [1,2,3]
@b = ['一','B','C'] Async.forEachSeries @a,(AA,cbLoop1)=>
AA的console.log
的console.log从环路1 ^号
Async.forEachSeries @b,(BB,cbLoop2)=>
#CALL下述方法
Async.waterfall(
[
(CB) - >
#CALL方法'开始'
#'开始'方法有一个回调,使用HTTP GET获取信息
启动BB,(错误响应) - GT;
#的console.log(响应),或者做一些回应
cbLoop2()
]
)
cbLoop1()
#所需的输出
1
^从环路1号
一个
b
C
2
^从环路1号
一个
b
C
3
^从环路1号
一个
b
C
解决方案
*大卫的回答帮助了我。我试图异步forSeries和瀑布语法弄个。
*任何投入,以改善欢迎!
异步=要求(异步)类测试
构造函数:() - GT;
@ A1 = [1,2,3]
@ B1 = ['一','B','C'] 测试:(T,回调) - GT;
Async.forEachSeries @ A1,(AA,cbLoop1)=>
的console.log从Array @ A1的价值 - >#{} AA
数= 0
Async.forEachSeries @ B1,(BB,cbLoop2)=>
CB = cbLoop2
#的console.log BB
Async.waterfall(
[
(cbLoop2) - >
数=计+ 1
t.methd1从Array @ B2值 - #{} BB(呃,响应) - GT;
响应的console.log
cbLoop2(NULL,计数)
(RESP,cbLoop2) - GT;
#have在这里做一些manupulations
cbLoop2(NULL,计数)
],(ERR,响应) - GT;
cbLoop2() ) (ERR) - GT;
的console.log(===)
cbLoop1()
methd1:(数据,回调) - GT;
@finalmethod$$#{}数据$$,回调 finalmethod:(数据,回调) - GT;
的setTimeout() - >
回调(未定义,数据)
,1500
T =新的测试()
t.test T,t.test_cb
产量
从Array @ A1的价值 - > 1
从Array @ B2 $$价值 - 一个$$
$$从Array @ B2价值 - B $$
从Array @ B2 $$价值 - Ç$$
===
从Array @ A1的价值 - > 2
从Array @ B2 $$价值 - 一个$$
$$从Array @ B2价值 - B $$
从Array @ B2 $$价值 - Ç$$
===
从Array @ A1的价值 - > 3
从Array @ B2 $$价值 - 一个$$
$$从Array @ B2价值 - B $$
从Array @ B2 $$价值 - Ç$$
===
I am lost in the callbacks. code and desired output is below. So what happening is inner loop is not executed that should prints the @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
解决方案
*David answer helped me. I was trying get hold of Async forSeries and waterfall syntax. *any inputs to improve are welcome !
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 $$
===
这篇关于Node.js的回调|异步的forEach嵌套循环瀑布流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文