如何有效地使用bluebird .all和.reflect?

时间:2016-03-02 18:30:16

标签: javascript promise bluebird

我有一系列的承诺,我需要等到所有的承诺得到满足或拒绝。 这就是我正在做的事情

var = [promiseA,promiseB,promiseC]      
    Promise.all(promises.map(function(promise) {
     
       return promise.reflect();
    
    })).each(function(inspection) {
     
    if (inspection.isFulfilled()) {
    
    console.log("A promise in the array was fulfilled   with",inspection.value());
       
   } else {

      console.error("A promise in the array was 
       rejected with",  inspection.reason());
     
    }
       
 })

上面的代码打印了每个promise的履行或拒绝值。在我的情况下,每个promise都会返回成功或错误json。我需要使用像.then()这样的函数来获取所有成功的json值。

当我尝试使用.then

获取值时
Promise.all(promises.map(function(promise) {
      
   return promise.reflect();
   
 })).then(data){
//_settledValue gives me the json value either success json or error json
   console.log('data[0]::::’+JSON.stringify(data[0]._settledValue));    
}.

我将如何忽略错误json并仅在此处取得成功json? 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

使用其他建议的Array.filterBluebird.filter

Bluebird.all(promises.map(function(promise) {
          
  return promise.reflect();
       
}))
  .filter(function(promise) {return promise.isFulfilled();})
  // or .then(promises => promises.filter(/*...*/))
  .then(function (data) {
     // only successful ones are available here...
  });