将RSVP.js移植到bluebird上映射成语

时间:2014-08-18 15:43:31

标签: javascript promise bluebird rsvp.js

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中的等效内容是什么?

1 个答案:

答案 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.
});