3

此代码应该返回 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'
4

1 回答 1

4

您的直觉不正确:IcedCoffeeScriptawait...defer不能阻止同步forEach循环。

请记住,IcedCoffeeScript 编译为不支持阻塞的 JavaScript。一旦你调用forEach了一个数组,你就承诺在触发任何事件之前遍历整个数组。

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

for info, index in anArray ->
  ...

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

于 2012-05-10T15:05:53.927 回答