Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:异步函数_Javascript_Node.js_Asynchronous_Promise_Async Await - Fatal编程技术网

Javascript JS:异步函数

Javascript JS:异步函数,javascript,node.js,asynchronous,promise,async-await,Javascript,Node.js,Asynchronous,Promise,Async Await,我是JS新手,在异步函数方面遇到了一些问题。 我有一个函数,从MongoDB返回数据。我创建了一个承诺,并使用空对象获取集合 async function getRating(item, applicant) { let arr = await Applicant.find({ proff: item }).sort({ ball: "desc" }); let rating = arr.findIndex(item => item._id.equals(applicant._id));

我是JS新手,在异步函数方面遇到了一些问题。 我有一个函数,从MongoDB返回数据。我创建了一个承诺,并使用空对象获取集合

async function getRating(item, applicant) {
let arr = await Applicant.find({ proff: item }).sort({ ball: "desc" });
let rating = arr.findIndex(item => item._id.equals(applicant._id));
let spec = await Spec.findById(item);
const el = { spec, rating };
return el;}

router.get("/test", auth, async (req, res) => {
let applicant = await Applicant.findOne({ user: req.user.id });
let ratings = [];
applicant.proff.forEach(item => {
    const rating = getRating(item, applicant)
    .then(rating => ratings.push(rating))
    .catch(err => console.log(err));
     ratings.push(rating);
}); 
await res.json(ratings);
});
当我签入Postman时,这个returnme数组:[{},{},{}]


请帮助。

此部分仍然是异步的,您必须使用wait

 const rating = getRating(item, applicant).then(rating => ratings.push(rating)).catch(err....

异步函数返回promise,因此您需要在getRating之前使用wait。

您可以尝试
promise。所有

异步函数getRating(项目,申请人){ 让arr=wait applicator.find({proff:item}).sort({ball:'desc'}); 让评级=arr.findIndex(项目=>项目id等于(申请人id)); let spec=等待spec.findById(项目); const el={spec,rating}; 返回el; } 路由器.get('/test',auth,async(req,res)=>{ let applicator=wait applicator.findOne({user:req.user.id}); const ratingsPromise=applicator.proff.map(异步项=>{ 施工评分=等待获得评分(项目、申请人); 回报率; }); 常数评级=等待承诺。全部(评级承诺); 返回res.json(评级); });
欢迎来到SO!,你们能告诉我你们从申请人身上得到了什么吗?我不确定,但我找不到你们的回复。在申请人身上我得到了一些信息。其中有关用户的信息。无效。现在得到一个空数组。对于这样简短的答案,请使用注释。