Promise的结果是一个数组,如何再去调用一个Promise,返回最终的组合的结果?

我在写一个后台,封装了两个方法去查询数据库,它们的返回都是Promise,调用它们都有正确的结果。
functionlist(req,res,next){
letstart=req.query.start;
letcount=req.query.count;
exchangeDb.queryList(start,count).then(results=>{
res.json(results)
}).catch(err=>{
throwerr;
});
}
functionload(req,res,next,name){
letlimit=req.query.limit;
exchangeDb.queryVolume(name,limit).then(results=>{
req.results=util.convert(results);
returnnext();
}).catch(err=>{
throwerr;
});
}
第一个返回的是列表,第二个是返回详情。我想把它们合为一个方法,尝试这样做:
functionlist(req,res,next){
letstart=req.query.start;
letcount=req.query.count;
exchangeDb.queryList(start,count).then(results=>{
results.forEach((index,element)=>{
exchangeDb.queryVolume(element.name,50).then(volume=>{
element.volume=volume;
results[index]=element;
})
});
res.json(results)
}).catch(err=>{
throwerr;
});
}
显然,它不能工作,我被这个问题深深的困扰了,如果是链式的Promise,then().then()看上去也不能解决这个问题,请大家帮忙看一下,谢谢。
慕桂英546537
浏览 323回答 2
2回答

婷婷同学_

如果我没看错的话,你合并之后的函数应该是在res.json(results)这里返回结果的,很显然是不能正确返回的(results很可能是queryList的结果).因为你内部queryVolume是一个耗时的操作,程序执行到res.json(results)块时,此时results值并没有被改变。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript