Ich fand den Begriff "The Ghost Promise" here, die wie mein Fall aussieht.Wie man das Verheißungs-Antimuster repariert - Ghost Promise?
Ich habe den Code wie folgt:
return Q.Promise(function(resolve, reject) {
firstFunctionThatReturnPromise()
.then(function(firstResult) {
_check(firstResult) ? resolve(firstResult) : return secondFunctionThatReturnPromise();
})
.then(function(secondResult) {
console.log(secondResult);
return thirdFunctionThatReturnPromise(secondResult);
})
.then(function(thirdResult) {
resolve(thirdResult);
})
.catch(function(e) {
reject(e)
});
});
Das Problem ist, auch wenn die _check
kehrt wahr, es geht nach wie vor zu dem console.log
Befehl (der in undefined
führt).
Wenn die _check
false zurückgibt, funktionieren die Dinge wie erwartet.
Also meine Frage ist:
- Wenn das oben beschriebene Verhalten ist normal?
- Gibt es eine elegantere Art, diesen Fall zu behandeln?
Update 1: Viele in Frage gestellt, warum ich Q.Promise
stattdessen das Ergebnis direkt zurückzugeben. Dies liegt daran, dass dies eine generische Funktion ist, die von anderen Funktionen gemeinsam genutzt wird.
// Usage in other functions
genericFunction()
.then(function(finalResult) {
doSomething(finalResult);
})
.catch(function(err) {
handleError(err);
});
Sie habe hier keinen Geist, sondern einen einfachen ['Promise' Konstruktor Antipattern] (http://stackoverflow.com/q/23803743/1048572)! – Bergi