In meinem Code, basierend auf einer bestimmten Bedingung, möchte ich auf die done
Funktion überspringen, unabhängig von allen then
Funktionen.Korrekter Weg zum Überspringen einer Dann-Funktion in Q Promises
Die ursprüngliche Version dieser Frage befindet sich in den Änderungen. Das Folgende ist das eigentliche Problem, mit dem ich es zu tun habe. Es tut uns leid
tatsächliche Problem:
ich eine Datei lese und es zu verarbeiten. Wenn der Inhalt der Datei bestimmte Bedingungen erfüllt, muss ich eine Reihe von Operationen auf dem Dateisystem ausführen (sagen Sie, lesen und schreiben Sie einige Dateien) und dann done
Funktion ausführen. Wenn die Bedingungen fehlschlagen, muss ich alle Reihe von Operationen überspringen und ich muss die done
Funktion direkt ausführen.
ich ein Objekt zurückgeben (läßt result
sagen) in allen then
Funktionen und in den nächsten then
ich aktualisiere result
und es zurück. Also, wenn alle then
fertig sind, wird done
die angesammelten result
haben. Schließlich wird done
result
verarbeiten und ausdrucken. Wenn die Bedingungen nicht erfüllt sind, wird done
einfach result
(die leer wäre) drucken.
Q()
.then(readFile)
.then(function (contents) {
var processResult = process the contents;
if (processResult) {
return {};
} else {
// How can I skip to `done` from here
}
})
.then(function (results) {
// do some more processing and update results
return results;
})
... // Few more then functions similar to the one above
...
.fail(function (exception) {
console.error(exception.stack);
})
.done(function (results) {
// do some more processing and update results
console.log(results);
});
Nicht sicher, aber können Sie nicht ein Objekt zurückgeben, das einen booleschen Wert enthält, abhängig von diesem booleschen Wert wird Ihre nächste Funktion ja/nein ausführen. \t 'return { \t \t random: ..., \t \t Prozess: true \t};', in Ihren Anruf nächsten dann: '.then (function (data) { \t if (data.process) \t \t Rückkehr; \t \t Rückkehr data.randomNumber + 1; }) ' – Dieterg
@DieterGoetelen, dass, obwohl die nächste Verarbeitungsfunktion extrem abhängig von dem vorherigen Schritt machen würde. – poke
Könnten Sie bitte ein realeres Problem verwenden (vielleicht Ihre eigentliche Aufgabe, es wäre in Ordnung mit viel Pseudocode von dem, was passiert)? Ihr synchrones Beispiel macht nicht wirklich viel Sinn. – Bergi