我在下面用mongodb查询。我从前端得到了一系列练习,我需要一个接一个地插入它们。而且在每次练习中我都会得到sets
,所以我需要再次遍历它们,还需要代表sets
创建多个练习
这是我的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 { } } ]
谢谢!
答案 0 :(得分:1)
对于循环不等待承诺被解决的循环。您应该使用地图。我看到您的地图正确,但在地图内部您使用的是标准的for循环,如果Promise等待,则不正确,请参见带有嵌套地图的示例
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' })