Node.js的回调|异步的forEach嵌套循环瀑布流 [英] Node.js Callbacks | Async forEach nested loop with waterfall flow

查看:166
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆