蓝鸟promise.all不尊重结果顺序

时间:2016-06-11 08:12:13

标签: node.js promise bluebird

我正在使用最新稳定的蓝鸟:

"bluebird": "~3.4.0",

使用以下代码:

Promise.all([ParticipantsService.retrieveActiveParticipantsFromTheLocalDb(),
    EventService.retrieveActiveEventsFromTheLocalDb(),
    HeatService.retrieveActiveHeatsFromTheLocalDb()]).then(
    function (results) {
        var namedResults = {participants: results[0], events: results[1], heats: results[2]};
        return res.render('runners/runners', namedResults);
    }).catch(
    function (err) {
        winston.error('Failed to retrieve participants and or event details', err);
        return res.send(err);
    });

我希望namedResults总是具有正确的元素顺序,这些元素与promises数组的顺序相匹配,但事实并非如此!我每次都有不同的订单。

我之所以这么做是因为它是蓝鸟文档中的内容:http://bluebirdjs.com/docs/api/promise.all.html  除非我读错了......

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:2)

你应该能够使用bluebird的Promise.props():

Promise.props({
  participants: ParticipantsService.retrieveActiveParticipantsFromTheLocalDb(),
  events: EventService.retrieveActiveEventsFromTheLocalDb(),
  heats: HeatService.retrieveActiveHeatsFromTheLocalDb()
}).then(res.render.bind(res, 'runners/runners'))