Es ist schwer zu lernen, wie die verzögerte Antipatern mit den Informationen zu vermeiden, die ich finden konnte. Ich verwende eine Q-Bibliothek für Nodejs.Wie zu vermeiden, verzögerte Antipattern
Da es möglich ist, im Grunde zu lesen, müssen wir versuchen, eine Zusage mit deferred.reject oder deferred.resolve nicht abzulehnen oder zu beantworten.
deferred.resolve muss durch einen Return-Satz ersetzt werden, so dass der Punkt ziemlich einfach ist.
Das Problem kommt, wenn ich ein Versprechen innerhalb einer Funktion verwenden möchte, die die Ausführung in einigen Fällen ablehnen muss, die keine Anwendungsfehler sind. Zum Beispiel:
Services.data.isNotForbiddenFieldToUpdate(bodyKeys,forbidden)
.then(() => console.log('Finish'))
Wo
isNotForbiddenFieldToUpdate: (fieldsToUpdate,forbiddenFields) => {
var deferred = Q.defer();
//DO A QUERY AND STORE IN result PARAM
if(err) deferred.reject(err)
else if(! result) deferred.reject(new Error('Query is empty.'));
else deferred,resolve();
return deferred.promise;
}
In diesem Fall nicht möglich ist, etwas anderes deferred.promise zurückzukehren. Wenn ich das entferne und true zurückgebe, ist der Fehler, dass then
unbekannt ist.
Wie kann ich diese Art von Code verwalten, ohne zurückgestellt zu verwenden, wenn dies möglich ist? Vielen Dank.
Ist die Abfrage eine asynchrone Operation? Wenn ja, machst du das Richtige, indem du ein Versprechen eingibst. Andernfalls geben Sie kein Versprechen ab. –
Könnten Sie explizit das verzögerte Antipattern angeben, auf das Sie verweisen? Ich bin wirklich neugierig, was du vermeiden willst. Versprechen sind ein Werkzeug, um die Callback-Hölle zu vermeiden. – zero298