Bei der Arbeit mit Bluebird-Promises in Bookshelf kommt es bei Entwicklern oft zu Problemen Verwenden Sie ein ähnliches Muster wie das folgende:
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}) .then(function(model) { return model; }); };
Dieser Code wirft jedoch Fragen für diejenigen auf, die mit Versprechen nicht vertraut sind. Hat die Funktion then einen sinnvollen Einfluss auf das Gesamtverhalten des Codes? Könnte die folgende Implementierung ohne sie das gleiche Ergebnis erzielen?
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}); };
Der Kern der Sache liegt in dem an then übergebenen Funktionsparameter. Von diesem Argument wird erwartet, dass es den Rückgabewert des vorhergehenden Versprechens in der Kette erhält. Es scheint also, dass die Rückgabe a; Die Anweisung innerhalb der Then-Funktion ist im Wesentlichen eine No-Op-Anweisung, da sie lediglich das empfangene Argument unverändert durchläuft.
Trotz ihrer scheinbaren Redundanz dient die Then-Funktion ein Zweck in bestimmten Anwendungsfällen. Ein Beispiel wäre, wenn das zurückgegebene Versprechen in der Kette anders behandelt werden muss. Es könnte beispielsweise protokolliert, in JSON konvertiert oder auf benutzerdefinierte Weise verarbeitet werden. Ein weiterer Vorteil besteht darin, dass die then-Funktion eine Fehlerbehandlung ermöglicht, obwohl dies je nach verwendeter Promise-Bibliothek auch durch done erreicht werden könnte.
Im Allgemeinen ist es ratsam, nur dann verwenden, wenn es wirklich erforderlich ist. Unnötige Funktionen können die Codebasis unnötig komplexer machen und das Fehlerpotenzial erhöhen. Als allgemeine Faustregel gilt: Integrieren Sie es nur dann, wenn das Ergebnis oder der Fehler des zurückgegebenen Versprechens explizit geändert oder verarbeitet werden muss.
Das obige ist der detaillierte Inhalt vonTut „.then(function(a){ return a; })' tatsächlich etwas für Versprechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!