2016-06-11 64 views
1

最新的稳定蓝鸟:蓝鸟promise.all不尊重我使用的结果为了

"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总是有正确顺序与承诺数组的顺序相匹配的元素,但这不是真的!我每次都有不同的顺序。

我假设这是因为它是什么,它说的知更鸟的文档:http://bluebirdjs.com/docs/api/promise.all.html 除非我读这错了...

谁能帮助?

感谢

+1

以我的经验与蓝鸟,是不尊重的顺序。看看这JSBin http://jsbin.com/sutemogilu/edit?js,console - 它完美的作品。你可以分享你的'retrieveActiveParticipantsFromTheLocalDb'函数和其他两个?也许这是关于他们的事情。顺便说一句,你可以在'Promise.all'中使用'spread'方法而不是'then'并跳过'nameResult',你可以在JSBin中看到它的注释。 –

+1

所以要清楚:你是否认为'namedResult'中的'participants','events'和'heats'的值不正确? – robertklep

+0

如何重现此? –

回答

2

您应该能够使用蓝鸟的Promise.props()这个:

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

刚刚阅读此答复我会尽快尝试,但文档听起来很有希望!谢谢! – ricardoespsanto