【问题标题】:await...defer in forEach loop在 forEach 循环中等待...延迟
【发布时间】:2012-05-10 23:12:39
【问题描述】:

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

【问题讨论】:

  • 因为 forEach 是同步的并且 await + defer 使得 findOne 也同步不?
  • ReferenceError: anArray is not defined

标签: node.js coffeescript mongoose iced-coffeescript


【解决方案1】:

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

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

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

for info, index in anArray ->
  ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多