2016-06-11 7 views
1

Ich erhalte einige Bilder mit $http.get(). Ich rufe sie derzeit mit $q.all() aber wenn ein Anruf/Versprechen fehlschlägt sie alle tun. Kann ich das anders machen?Laufversprechen parallel zu Angular 1.x ohne Stopp bei Fehler

$q.all([$http.get('..'),$http.get('..')]).then(function(res) { 
    // this will never happen if one get fails. 
} 
+0

Sie wickeln jeweils mit einem Versprechen bekommen könnten, so dass, wenn die get (scheitern oder Erfolg) durchgeführt wird, wird es beheben sein individuelles Versprechen. –

+0

Nie von '$ q.map()' gehört. Zeigen Sie relevanten Code. Kein Grund, warum individuelle Anfragen fehlschlagen müssen ... nur das abschließende 'when()', aber selbst das kann mit dem individuellen 'catch' umgangen werden – charlietfl

+0

@BryanEuton - $ http.get gibt bereits ein Versprechen zurück. – cyberwombat

Antwort

3

Einfach proof of concept catch()

var req1 = $http.get('..').catch(function(err){ return err; }); 
var req2 = $http.get('..').catch(function(err){ return err; }); 

$q.all([req1,req2]).then(function(results) { 
    var counts = {pass:0, fail:0} 
    results.forEach(function(item){ 
     var type = item.status === 200 ? 'pass':'fail'; 
     counts[type]++; 
    }); 
    alert('Results status =' + JSON.stringify(counts)) 
}); 

mit, weil Sie etwas vom Fang zurückkehren es die anfänglichen Versprechen löst und übergibt, dass das Versprechen Kette zurückkehrt nach unten (zu den Ergebnissen Array in diesem Fall).

Der Erfolg Rückruf von $q.all().then als Folge abfeuern

DEMO

Verwandte Themen