为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2019-05-14 11:28:41
我在写一个后台,封装了两个方法去查询数据库,它们的返回都是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()看上去也不能解决这个问题,请大家帮忙看一下,谢谢。
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果我没看错的话,你合并之后的函数应该是在res.json(results)这里返回结果的,很显然是不能正确返回的(results很可能是queryList的结果).因为你内部queryVolume是一个耗时的操作,程序执行到res.json(results)块时,此时results值并没有被改变。
                            
查看完整回答
反对 回复 2019-05-14
  • 2 回答
  • 0 关注
  • 322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信