【问题标题】:Is there a way to await multiple await calls within a async function?有没有办法在异步函数中等待多个等待调用?
【发布时间】:2021-01-25 15:33:18
【问题描述】:

此函数读取我所有的电影文档并解析某些属性;在我的个人收藏中创建新文档。

错误信息:-------------------------------------------- ----

等待 Person.create({ ^^^^^ SyntaxError: await 仅在异步函数中有效

【问题讨论】:

  • 此处的问题不应包含图像中的代码。这使得人们很难将代码复制/粘贴到答案中,这使得代码和 cmets 无法被索引,这使得某些可访问性变得更加困难,等等......请将代码作为文本粘贴并正确格式化。例如,如果我想向您展示编写代码的正确方法,我必须手动重新键入您在该图像中拥有的所有内容,这非常低效。您不想让人们难以为您提供完整而彻底的答案。

标签: node.js express mongoose async-await


【解决方案1】:

编辑
正如@jfriend00、Array.forEach expects a synchronous function 所指出的,并且不处理 Promises/async/await。要使用 async 和 await,您应该使用 for 循环替换所有使用 Array.forEach

for (const movie of movieObj) { ... }

至于等待多个异步调用,如果您希望这些调用真正是异步的,而不是等待每个单独的调用,您可以使用Promise.all 在异步调用的数组 上等待。由于它接受一系列承诺,因此您需要使用Array.map。例如,您可以这样做:

await Promise.all(arrayWriters.map((el) => Person.create(...)));

【讨论】:

  • 但是,.forEach() 不支持 promise,因此在其回调中使用 await 不会暂停循环。
  • @jfriend00 你说得对,很好。而不是.forEach(),OP 应该依赖:for (let movie of movieObj) { await ... }
  • 是的,如果您将其修改为不显示.forEach() 的使用并显示for 循环的用户,您的答案将是一个更好的答案。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2018-01-17
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多