如何使用 forEach 进行 Promise?我想要获取所有工作,但获取申请人的数据。我的工作模式已经有申请人 ID,但如何查询用户并将其详细信息合并到输出中?
Job.find({}).then(result => {
result.forEach(obj =>{
const applicant_id = obj.applicant._id
if(applicant_id){
User.findOne({_id: applicant_id})
.then(user=>{
return res.json({
status: 1,
data: {
...obj,
applicant: {
...user
}
}
})
})
}
})
}).catch(err => {
if(err){
return res.status(400).send({
msg: err
})
}
})
我尝试了 Promise,但我无法将用户合并到 Job 对象中,
Job.find({}).then(result => {
let promiseArray = []
result.forEach(obj =>{
const applicant_id = obj.applicant._id
if(applicant_id){
promiseArray.push(
User.findOne({_id: applicant_id}))
}
})
return Promise.all(promiseArray)
}).then(user => {
console.log(user)
//this work but this is only the user's data,
//I need it to be within obj which is Job data
})
最佳答案
您首先需要过滤结果中的项目以排除那些没有申请人 ID 的项目,然后将此数组映射到 Promise 数组,最后将其传递给 Promise.all
。这应该可以做到:
Job.find({}).then(result => {
const promises = result
.filter(obj => obj.applicant._id)
.map(obj => {
const applicant_id = obj.applicant._id
return User.findOne({ _id: applicant_id })
.then(user => {
return res.json({
status: 1,
data: {
...obj,
applicant: {
...user
}
}
})
})
})
return Promise.all(promises)
}).catch(err => {
if (err) {
return res.status(400).send({
msg: err
})
}
})
关于javascript - 在我的例子中,foreach 中的 Mongoose promise 失败了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229969/