如何使用 Node.js嵌套的异步 for EachSeries 循环



Using coffeescript to code一个解决方案 |看这篇文章

我有两个循环。我想从数组"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()

您的第一个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

最新更新