2016-03-02 30 views
3

我有一系列的承諾,我需要等到所有的承諾完成或被拒絕。 下面是我在做什麼如何有效地使用bluebird .all和.reflect?

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());
  
    }
  
}) 

上面的代碼打印每個承諾的履行或拒絕值。在我的情況下,這裏的每個承諾返回一個成功或錯誤的JSON。我需要使用像.then()這樣的函數來獲取所有成功的json值。

當我嘗試使用。那麼

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獲得價值? 任何人都可以幫我想出這個嗎?

+0

如果異步方法的返回結果並沒有真正拋出一個錯誤,但返回一個字符串,它說,這是一個錯誤,你可能必須處理自己通過檢查該字符串,因爲承諾可以」閱讀。想到'Array.filter'? – adeneo

+0

['Promise.filter'](http://bluebirdjs.com/docs/api/promise.filter.html)? – Bergi

回答

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... 
    }); 
+0

但是如果你想查看所有異常呢? – bflemi3