我在写一个后台,封装了两个方法去查询数据库,它们的返回都是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值并没有被改变。
添加回答
举报
0/150
提交
取消