等待...推迟forEach循环

时间:2012-05-10 14:13:28

标签: node.js coffeescript mongoose iced-coffeescript

这段代码应该返回12334还是12433?

我期待12334,但它给出12433 ......

console.log '1'
anArray.forEach (info, index, array)->
  console.log '2'

  await model.findOne info, defer(err, doc)
  console.log '3'

console.log '4'

1 个答案:

答案 0 :(得分:4)

你的直觉不正确:IcedCoffeeScript的await...defer无法阻止同步forEach循环。

请记住,IcedCoffeeScript编译为JavaScript,不支持阻止。一旦你在一个数组上调用forEach,你就已经承诺在任何事件发生之前迭代整个数组。

好消息是,您可以使用IcedCoffeeScript自己的循环结构来获得所需的行为。在你的情况下,

for info, index in anArray ->
  ...

有关处理JavaScript的非阻止事件模型的更多信息,请查看我的新书Async JavaScript