Как эффективно использовать 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. Мне нужно получить все успешные значения json с помощью такой функции, как .then().

Когда я пытаюсь получить значения, используя .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? Может ли кто-нибудь помочь мне понять это?


person Vinu    schedule 02.03.2016    source источник
comment
Если возвращаемый результат вашего асинхронного метода на самом деле не выдает ошибку, а возвращает строку, в которой говорится, что это ошибка, вам, вероятно, придется обрабатывать это самостоятельно, проверяя эту строку, поскольку Promises не может читать. Array.filter приходит на ум?   -  person adeneo    schedule 02.03.2016
comment
Promise.filter?   -  person Bergi    schedule 02.03.2016


Ответы (1)


Используйте Array.filter или Bluebird.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...
  });
person Louay Alakkad    schedule 06.03.2016
comment
Но что, если вы хотите увидеть все исключения? - person bflemi3; 09.12.2016