javascript - 如何等待多个嵌套数组

标签 javascript node.js asynchronous promise async-await

我对 mongodb 有以下查询。我从前端得到一系列练习,我需要将它们一一插入。而且在每个练习中我都会得到集合,因此我需要再次循环它们,并且还需要代表集合创建多个练习

这是我的 nodejs 文件中的代码

const createExercises = payload.exercises.map(async(exercise) => {
  for (let i = 1 ; i <= exercise.sets ; i++) {
    console.log(i)
    return (await Exercise.findOneAndUpdate(
      { user, exerciseName: exercise.exerciseName, workoutName: payload.workoutName, sets: i },
      { $set: {
        exerciseName: exercise.exerciseName, sets: i 
      }},
      { upsert: true }
    ))
  }
})
console.log(createExercises)
await Promise.all(createExercises)

return reply({ success: true, message: 'success' })

但问题是我无法等待回复。我在这里缺少什么。

编辑 --> 现在的问题是我在控制台中获取了 console.log(i)console.log(createExercises)

1
[ Promise {<pending>, domain: Domain { } } ]
2
3
4
5

我应该看到什么

1
2
3
4
5

[ Promise {<pending>, domain: Domain { } } ]

谢谢!!!

最佳答案

For 循环不等待 promise 得到解决。你应该使用 map 。我看到您的 map 是正确的,但在 map 内您使用的是标准 for 循环,这在 Promise 等待的情况下是不正确的,请参阅我的嵌套 map 示例

const createExercises = payload.exercises.map(async(exercise) => {
  return await Promise.all(exercise.sets.map(async (set, index) => {
    return (await Exercise.findOneAndUpdate(
      { user, exerciseName: exercise.exerciseName, workoutName: payload.workoutName, sets: i },
      { $set: {
        exerciseName: exercise.exerciseName, sets: index
      }},
      { upsert: true }
    ))
  }))
})
console.log(createExercises)
await Promise.all(createExercises)

return reply({ success: true, message: 'success' })

关于javascript - 如何等待多个嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589316/

相关文章:

javascript - jQuery 和 Javascript : offset. top() 没有响应

javascript - TypeError : Cannot read property 'Countries' of undefined. 为什么对象数组不被识别,不被过滤?

jakarta-ee - @Asynchronous EJB 线程池配置

javascript - 是否有与 Python id_token.verify_oauth2_token 类和方法等效的 C#

javascript - 在Angularjs中使用rest api上传图像

javascript - 返回nodejs子进程pid的最简单方法

java - 如何识别请求类型是同步还是异步

javascript - 调用数量可变且相互依赖的异步函数

javascript - aws lambda拒绝文件上传

node.js - AWS API网关WebSocket API : how to use it with React/NodeJS/native WebSocket?