gpt4 book ai didi

javascript - promise 链: parent promise is not waiting until child promise gets executed

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:23 25 4
gpt4 key购买 nike

我从一个 mongoDB 集合中获取数据,在该响应中我获得了另一个集合数据的 Id,然后获取该数据并将其合并到一个对象中。

这是我的代码,但它不是等待 unitl child primise 被执行。

指导我解决代码错误。

 Courses.find({})
.then( course => {
//getting data from one collection
let CoursePromises = course.map(
key => {

new Promise((resolve, reject) => {
key.questions = []
//getting data from another collection via Id fetched from first collection.
let getQuestionsPromises = key.questionIds.map(
ques =>
new Promise((resolve, reject) => {
Questions.find({_id: ques._id})
.then(question => {
resolve(question)
}).catch(err => {
console.error("Error in question ", err.message)
})
})
)
Promise.all(getQuestionsPromises).then((data) => {

key.questions.push(data)
console.log("getQuestionsPromises", key)
})
resolve(key)
})
})

Promise.all(CoursePromises).then((data) => {
console.log("CoursePromises") // here promise is now wait for exection done
res.send({ status: true, data: course })
}
)

我收到了这样的第一个收集响应:

{
"status": true,
"data": [
{
"_id": "5e3c1b683ac31f24da39e50a",
"courseName": "Test",
"duration": 1,
"createdBy": "John Die",
"__v": 0,
"updatedAt": "2020-02-06T13:58:00.906Z",
"createdAt": "2020-02-06T13:58:00.906Z",
"isAssigned": false,
"questions": []
"questionIds": [
{
"index": 1,
"_id": "5e3c1b683ac31f24da39e509"
}
]
}
]
}

使用 QuestionIds,我获取另一个重新编码并将该响应放入现有对象中像这样:

{
"status": true,
"data": [
{
"_id": "5e3c1b683ac31f24da39e50a",
"courseName": "Test",
"duration": 1,
"createdBy": "John Die",
"__v": 0,
"updatedAt": "2020-02-06T13:58:00.906Z",
"createdAt": "2020-02-06T13:58:00.906Z",
"isAssigned": false,
"questions": [
[
[
{
"_id": "5e3c1b683ac31f24da39e509",
"index": 1,
"isVideo": false,
"questionType": "MCQ",
"question": "Is this a demo question?",
"title": "Question",
"description": "this is question description",
"link": "",
"createdBy": "Harsh",
"updatedBy": "",
"__v": 0,
"updatedAt": "2020-02-06T13:58:00.521Z",
"createdAt": "2020-02-06T13:58:00.521Z",
"options": [
{
"one": "two"
}
]
}
]
]
],
"questionIds": [
{
"index": 1,
"_id": "5e3c1b683ac31f24da39e509"
}
]
}
]
}

最佳答案

在处理如此复杂的结构时,您应该遵循纯async-await语法。还可以使用 .lean()course 从 mongoose 对象转换为普通对象。

简化代码:

const course = await Courses.find({}).lean();
const coursePromises = course.map(async key => {
key.questions = [];
const getQuestionsPromises = key.questionIds.map(async ques => {
const question = await Questions.find({ _id: ques._id });
key.questions.push(question);
});
await Promise.all(getQuestionsPromises)
});
await Promise.all(coursePromises)
return res.send({ data: course })

关于javascript - promise 链: parent promise is not waiting until child promise gets executed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60107092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com