在RSVP.js中,有一个非常优雅的习语:
var promises = [2, 3, 5, 7, 11, 13].map(function(id){
return getJSON("/post/" + id + ".json");
});
RSVP.all(promises).then(function(posts) {
// posts contains an array of results for the given promises
}).catch(function(reason){
// if any of the promises fails.
});
但是我使用的是一个已经依赖的库,并公开了一些bluebird's api。因此,我宁愿避免在RSVP.js中混音,即使它看起来有时更优雅。
上面RSVP.js代码段的bluebird中的等效内容是什么?
答案 0 :(得分:3)
除了使用Bluebird的Promise
命名空间而不是RSVP
之外,所有内容都可以保持不变 - 使用Promise.all
。此外,混合符合Promises A+ specification的承诺应该可以正常工作,因此您甚至可能 更改任何内容。
虽然我个人不喜欢它,但Bluebird也有自己的成语 - Promise.map
:
Promise.map([2, 3, 5, 7, 11, 13], function(id){
return getJSON("/post/" + id + ".json");
}).then(function(posts) {
// posts contains an array of results for the given promises
}).catch(function(reason){
// if any of the promises fails.
});