Wenn Sie eine Kette von Versprechen haben, haben sie alle bereits begonnen und es gibt nichts, was Sie tun können, um eine von ihnen zu starten oder zu stoppen (Sie können abbrechen, aber das ist so weit wie es geht).
Angenommen, Sie haben F1,... Fn
Versprechen der Rückkehr Funktionen, können Sie den Grundbaustein Versprechen nutzen, unsere .then
dafür:
var promises = /* where you get them, assuming array */;
// reduce the promise function into a single chain
var result = promises.reduce(function(accum, cur){
return accum.then(cur); // pass the next function as the `.then` handler,
// it will accept as its parameter the last one's return value
}, Q()); // use an empty resolved promise for an initial value
result.then(function(res){
// all of the promises fulfilled, res contains the aggregated return value
}).catch(function(err){
// one of the promises failed,
//this will be called with err being the _first_ error like you requested
});
Also, die weniger kommentierte Version:
var res = promises.reduce(function(accum,cur){ return accum.then(cur); },Q());
res.then(function(res){
// handle success
}).catch(function(err){
// handle failure
});
Dank ! Ich nehme jedoch an, dass das "aggregierte Ergebnis", das im letzten "dann" als Argument übergeben wurde, etwas ist, das ich selbst umsetzen muss, je nach meiner eigenen Bequemlichkeit. – Guid
@Guid Es hängt von Ihrer API ab, ich nehme an, dass jedes Versprechen das Ergebnis des vorherigen erfordert (da Sie nacheinander nach ihnen gefragt haben). Sie könnten zum Beispiel - erstellen Sie ein Array außerhalb und drücken Sie es in der Schleife (vor dem 'return accum.then (cur);') -Teil, und dann '.return' die Ergebnisse. –