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

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

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

狐的传说 2019-03-12 17:15:14
我在写一个后台,封装了两个方法去查询数据库,它们的返回都是Promise,调用它们都有正确的结果。function list(req, res, next) {    let start = req.query.start;    let count = req.query.count;    exchangeDb.queryList(start, count).then(results => {        res.json(results)    }).catch(err => {        throw err;    });}function load(req, res, next, name) {    let limit = req.query.limit;    exchangeDb.queryVolume(name, limit).then(results => {        req.results = util.convert(results);        return next();    }).catch(err => {        throw err;    });}第一个返回的是列表,第二个是返回详情。我想把它们合为一个方法,尝试这样做:function list(req, res, next) {    let start = req.query.start;    let count = 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 => {        throw err;    });}显然,它不能工作,我被这个问题深深的困扰了,如果是链式的Promise,then().then()看上去也不能解决这个问题,请大家帮忙看一下,谢谢。
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-05
  • 3 回答
  • 0 关注
  • 708 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号