const findusers=(commentarr)=>{
return new Promise((resolve,reject)=>{
let final_comment_arr=[];
commentarr.forEach(element=>{
comment.findOne({_id:element}).then(result_comment=>{
final_comment_arr.push(result_comment);
});
})
resolve(final_comment_arr);
reject(new Error('failed to find users'));
})
}
当我解析数组时,它返回一个空数组如何解决此问题
答案 0 :(得分:0)
我看到您使用mongodb,有一个$in
可以找到该数组中的所有ID,而不是循环遍历。
const findusers=(commentarr)=>{
return new Promise(async(resolve,reject)=>{
let result = await comment.find({ _id: { $in: commentarr }})
if(result.length < 1){
reject(new Error('failed to find users'));
}else {
resolve(result);
}
})
}
我不确定result
是返回数组还是只是null
。也许您可以通过控制台登录并签出
答案 1 :(得分:0)
因此您的comment.findOne
是一个异步呼叫。您可以调试它以查看异步调用的顺序。我的意思是您有一个rica条件,可能在解决resolve(final_comment_arr);
中的任何一个问题之前调用了comment.findOne
。您可以将解决方案更改为:
const findusers=(commentarr)=>{
return new Promise((resolve,reject)=>{
let commentsPromises = commentarr.map(element=> comment.findOne({_id:element}))
resolve(Promise.all(commentsPromises)) // resolve is like a return for Promie
})
}
Promise.all是一个函数,它接受promise的数组并在每个promise解析时返回结果
(注意:我没有运行此代码,因此可能存在一些语法错误)
为了简化解决示例,我删除了此错误处理
您可以将我的示例简化为:
const findusers=(commentarr)=>
Promise.all(commentarr.map(element=> comment.findOne({_id:element})))