Ich habe eine Versprechenskette, die zur Zeit mit sehr einfacher Fehlerbehandlung läuft. Wenn ein Schritt fehlschlägt, werden die nachfolgenden Schritte nicht ausgeführt. Ich möchte in der Lage sein, die Versprechenskette zu einem späteren Zeitpunkt fortzusetzen, wenn ein Fehler auftritt, und sie sollte dort beginnen, wo sie aufgehört hat. DieseWie man modulare js Versprechenketten baut?
ist, was meine aktuellen Code wie folgt aussieht:
// controller.js
var failure = false;
QueryFactory.step1() // Step 1
.then(function(msg){
if(failure == false){
console.log("Finished Step 1");
return QueryFactory.step2();
}
}, function(err){
console.log(err);
failure = true;
})
.then(function(msg){ // Step 2
if(failure == false){
console.log("Finished Step 2");
return QueryFactory.step3();
}
}, function(err){
console.log(err);
failure = true;
})
.then(function(msg){ // Step 3
if(failure == false){
console.log("Finished Step 3");
}
}, function(err){
console.log(err);
failure = true;
})
Und meine Fabrik sieht wie folgt aus:
// QueryFactory.js
step1 = function(){
var deferred = $q.defer();
$http.post('/task', {step_num: 1})
.then(function(data)){
deferred.resolve(data);
}, function(err){
deferred.reject(err);
});
return deferred.promise;
}
// step2 and step3 are similar
Aber vielleicht gibt es einen besseren Weg, dies zu schreiben, für die Modularität zu ermöglichen? Angenommen, Schritt 2 würde fehlschlagen, wie kann ich einen Weg entwerfen, so dass ein Benutzer auf eine Schaltfläche klicken kann, um später die Kette aus Schritt 2 fortzusetzen?
Ihre "Kette" gibt keine Daten von einem Schritt an den nächsten Schritt weiter. Außerdem werden sie alle nacheinander ausgeführt, unabhängig von "Erfolg" oder "Fehlschlag". – Amit
Also, wie empfehlen Sie, dass ich das richtig mache? –
Vor allem vermeiden Sie die [latente Antipattern] (http://stackoverflow.com/q/23803743/1048572)! – Bergi