return-Wert innen Versprechen chain ist nicht immer genannt
Ich bin mit dem Versprechen, Bibliothek Bluebird und ich bin derzeit laufen in das Problem, dass alles, was innerhalb der Funktion läuft Super, aber wenn ich versuche, einen Wert zurückzugeben, die Funktion stattdessen gibt undefined
.
Dies ist das Versprechen Kette:
function foo() {
createGroupMembers(parsedChat).then(function(val) {
var members = val;
createMessages(parsedChat, maxPages).then(function(val) {
var messages = val;
Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)])
.then(function (results) {
var front = results[0];
var stats = results[1];
var backcover = results[2];
var book = head + front + stats + members + messages + backcover;
console.log('pages in this book: ', pages);
console.log(book); //logs perfect values.
return book;
});
});
});
}
Das problem ist einfach: beim aufrufen von foo()
, es Wert ist, wird undefined
statt Buch. Warum bin ich bei denen dieses Verhalten?
- foo nicht zurück, was bei allen
- Ich bin nicht vertraut mit Bluebird, aber ich habe verwendet native JS verspricht. Gesagt haben, dass... die anonyme Funktion
function(results)
zurück buchen. Die beiden anonymen Funktionenfunction(val)
darüber nichts zurück.foo
am Ende nichts zurück. - Sie benötigen, um alle Ihre verschachtelte Funktionen. createGroupMembers, createMessages, etc.
- Wie kann ich es machen, etwas zurückzugeben, und warum nicht zurück?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun foo-zurück-Versprechen auflösen kann, um den Wert des Buches
Um ehrlich zu sein,
foo
könnte umgeschrieben werden, aber das ist eine andere Frage insgesamtFYI: Sie könnten etwas tun, wie dies für foo
Durcheinander herum mit der Reihenfolge, in der zweiten (war Ihr nur) Versprechen.alle, und fügte hinzu, die früheren Versprechen Ergebnisse in der es um die endgültige conatenation von teilen ist so einfach wie ein
.join
- doing es auf diese Art und Weise wird auch übertragen, alle Fehler korrekt, so dass Ihre Verwendung von foo kann