2016-01-27 1 views
0

У меня есть множество обещаний.Решение Muliple Promise Node-JS

var defered = q.defer(); 
// promises is a array which will have different promises 
var promises = []; 

q.all(promises).then(function(response){ 

// SUSSECCFULLY RESOLVED ALL PROMISE THEN EXECUTION COME HERE 

}, function(error){ 

// IF ANY PROMISE FAILED THEN EXECUTION COME HERE 

}); 

Я хочу обработать все обещания, если они потерпят неудачу или они разрешат.

+3

Что ваш вопрос? –

+0

Некоторые обещания Сбой, тогда он будет вызывать функцию сбоя для всех обещаний. Если все обещания пройдут, а только вызовет функцию успеха. Как обрабатывать некоторые из них не проходят некоторые обещания. –

+1

Может быть, метод _.allSettled_ будет полезен для вас. https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled – the4lt

ответ

0

Пример использования 1:

Вы хотите обрабатывать ошибки, которые будут обрабатываться отдельно, и успех на всех не называется:

var myApp = angular.module('myApp', []); 
 

 
function MyCtrl($scope, $q, $timeout) { 
 
\t function prOne(){ 
 
    \t var d = $q.defer(); 
 
    setTimeout(function(){ 
 
    \t d.reject(); 
 
\t \t }, 100); 
 
    return d.promise; 
 
    } 
 
\t function prTwo(){ 
 
    \t var d = $q.defer(); 
 
    setTimeout(function(){ 
 
    \t d.resolve(); 
 
\t \t }, 100); 
 
    return d.promise; 
 
    } 
 
    $q.all([prOne().catch(function(){ console.log('fail for one'); return $q.reject() }), prTwo()]).then(function(){ 
 
    \t console.log('success'); 
 
    return $q.resolve(); 
 
    }).catch(function(){ 
 
    \t console.log('error'); 
 
    });; 
 
} 
 

 
myApp.controller('MyCtrl', MyCtrl);

Пример использования 2:

Вы хотите обрабатывать ошибки, которые будут обрабатываться отдельно и успех на всех называют иначе:

var myApp = angular.module('myApp', []); 
 

 
function MyCtrl($scope, $q, $timeout) { 
 
\t function prOne(){ 
 
    \t var d = $q.defer(); 
 
    setTimeout(function(){ 
 
    \t d.reject(); 
 
\t \t }, 100); 
 
    return d.promise; 
 
    } 
 
\t function prTwo(){ 
 
    \t var d = $q.defer(); 
 
    setTimeout(function(){ 
 
    \t d.resolve(); 
 
\t \t }, 100); 
 
    return d.promise; 
 
    } 
 
    $q.all([prOne().catch(function(){ console.log('fail for one'); return $q.resolve() }), prTwo()]).then(function(){ 
 
    \t console.log('success'); 
 
    return $q.resolve(); 
 
    }).catch(function(){ 
 
    \t console.log('error'); 
 
    });; 
 
} 
 

 
myApp.controller('MyCtrl', MyCtrl);

+0

Спасибо Yerken за ваше драгоценное время ... Мой массив обещаний динамичен, он может иметь 15 обещаний в время. Есть ли какое-то общее решение для этого. Я имею в виду, что нет метода inbuild, предоставленного q для этого ... как q.all(). –

+0

Несомненно, просто обработайте его в рамках обещания, возвращенного в $ q.all – Yerken