ich lese dieses Tutorial über Bookshelf. Bookshelf verwendet Bluebird-Versprechen. Es gibt einige Beispiele, die etwa so aussehen:
var getEvents = function(participantId) {
return new models.Participant()
.query({where: {id: participantId}})
.fetch({withRelated: ['events'], require: true})
.then(function(model) {
return model;
});
};
Ich fühle mich immer noch nicht wohl mit Versprechungen, aber nach dem, was ich bisher gelernt habe, erscheint mir das seltsam. Meine Frage ist, ist die obige Funktion genau die gleiche wie die Rückkehr fetch()
direkt und das Finale weglassen then()
:
var getEvents = function(participantId) {
return new models.Participant()
.query({where: {id: participantId}})
.fetch({withRelated: ['events'], require: true});
};
Das heißt, es tut immer noch dasselbe, gibt dasselbe Versprechen zurück, kann auf dieselbe Weise aufgerufen werden usw.?
Soweit ich weiß, wird der Parameter an die Funktion übergeben then
erhält den Rückgabewert des vorherigen Versprechens in der Kette. So kommt es mir vor .then(function (a) { return a; })
im Allgemeinen ist nur ein No-Op. Rechts?
Wenn sie nicht gleich sind, was ist der Unterschied? Was ist los und warum hat der Autor es so geschrieben?
.then(function(model) { return model; });
ist nutzlos und kann (und sollte) fallen gelassen werden.– dfq
11. Dezember 2016 um 17:51 Uhr
das macht Sinn, wenn
fetch
Handler kann einige Parameter bereitstellen. Danach würde sich das Versprechen nur mit einem lösen.– Grundi
11. Dezember 2016 um 17:52 Uhr
Autor zuletzt hinzugefügt
then
um zu zeigen, dass Sie in diesem Schritt manipulieren könnenmodel
– Stasowlas
11. Dezember 2016 um 17:52 Uhr
Ein häufiger Grund für das Extra
.then()
ist, damit Sie das Ergebnis dort protokollieren oder einen Haltepunkt darauf setzen können, um es zu überprüfen. Das sollte wahrscheinlich vor der allgemeinen Veröffentlichung entfernt werden, aber manchmal ist es deshalb da. Oder der Autor dachte, dass er das Ergebnis vielleicht ein wenig verarbeiten möchte, bevor er es zurücksendet, und hat es dann nicht geschafft. Oder dies wurde nur zu Bildungszwecken getan, um besser zu veranschaulichen, was das Rückgabeergebnis war.– jfriend00
11. Dezember 2016 um 18:28 Uhr