我对 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/