如何使用Node.js嵌套的Async forEachSeries循环

时间:2012-11-30 01:35:05

标签: node.js

使用coffeescript代码 One solution | see this post

我有两个循环。我想从数组'a'中取出每个值然后循环遍历'b'的所有值来处理它们并移动到数组'a'中的下一个值

预期输出:

1 a b c
2 a b c
3 a b c

我看到错误:

 [ 1, 2, 3 ]

 [ 'a', 'b', 'c' ]

 1
 2
 3

 TypeError: Cannot read property 'length' of undefined
   at Object.forEachSeries(~/src/node_modules/async/lib/async.js:103:17)




  Async = require('async')

  @a = [1,2,3]
  @b = ['a','b','c']

  console.dir @a
  console.dir @b

  Async.forEachSeries @a, (aa , cbLoop1) ->
    console.log aa
    cbLoop1()
    Async.forEachSeries @b, (bb , cbLoop2) ->
      #here will be some callback that I need to process before moving to next value in
      #b array
      console.log bb
      cbLoop2()

1 个答案:

答案 0 :(得分:2)

您的第一次Async.forEachSeries来电会进行回调,这会更改this

的值
Async.forEachSeries @a, (aa , cbLoop1) ->
  # inside the callback, the value of `this` has changed,
  # so @b is undefined!

使用=>语法将this的值保留在回调中:

Async.forEachSeries @a, (aa , cbLoop1) =>
  console.log aa
  cbLoop1()
  Async.forEachSeries @b, (bb , cbLoop2) ->
    # use `=>` again for this callback if you need to access this (@) inside
    # this callback as well