Ich habe einen Javascript-Code wie diesen:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
Ich habe immer einen undefinierten Wert für den Var-Test. Ich denke, das liegt daran, dass die Versprechen noch nicht gelöst sind. Gibt es eine Möglichkeit, einen Wert aus einem Versprechen zurückzugeben?
javascript
promise
Priscy
quelle
quelle
then()
Anrufs ist wieder ein Versprechen, das den von Ihnen zurückgegebenen Wert umschließt.promise
. Sie zeigen es nirgendwo definiert an und geben nichts von IhrerjustTesting()
Funktion zurück. Wenn Sie bessere Hilfe benötigen, müssen Sie beschreiben, welches Problem Sie lösen möchten, anstatt uns nur Code zu zeigen, der so "aus" ist, dass er nicht einmal veranschaulicht, was Sie wirklich versuchen. Erklären Sie das Problem, das Sie lösen möchten.Antworten:
Wenn Sie etwas von einem
then()
Rückruf zurückgeben, ist es ein bisschen magisch. Wenn Sie einen Wert zurückgeben, wird der nächstethen()
mit diesem Wert aufgerufen. Wenn Sie jedoch etwas Versprechendes zurückgeben,then()
wartet das nächste darauf und wird nur aufgerufen, wenn dieses Versprechen erfüllt ist (erfolgreich / fehlgeschlagen).Quelle: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
quelle
Um ein Versprechen zu verwenden, müssen Sie entweder eine Funktion aufrufen, die ein Versprechen erstellt, oder Sie müssen selbst eine erstellen. Sie beschreiben nicht wirklich, welches Problem Sie wirklich lösen möchten, aber so würden Sie selbst ein Versprechen erstellen:
Wenn Sie bereits eine Funktion haben, die ein Versprechen zurückgibt, können Sie diese Funktion verwenden und ihr Versprechen zurückgeben:
quelle
return
, dhjustTesting
sagtreturn.then => return
. Ich weiß, dass dies funktioniert, weil ich dies implementiert habe (bcs-Flusen haben mich dazu gezwungennew Promise
), aber können Sie erklären, wie man dieses Return / Return-Paar versteht / denkt?.then()
eine separate Funktion von der enthaltenen Funktion. Wenn sie aufgerufen wird, hat sie einen eigenen Rückgabewert. Zweitens wird der Rückgabewert eines.then()
Handlers zum aufgelösten Wert des Versprechens. Ändert.then(val => {return 2*val;})
also den aufgelösten Wert vonval
nach2*val
.Was ich hier getan habe, ist, dass ich ein Versprechen von der justTesting-Funktion zurückgegeben habe. Sie können das Ergebnis dann erhalten, wenn die Funktion aufgelöst ist.
Hoffe das hilft!
quelle
Ich bevorzuge die Verwendung von "Warten" -Befehls- und Async-Funktionen, um Verwirrungen von Versprechungen zu beseitigen.
In diesem Fall würde ich zuerst eine asynchrone Funktion schreiben, diese wird anstelle der anonymen Funktion verwendet, die unter "Versprechen.then" Teil dieser Frage aufgerufen wird:
und dann würde ich diese Funktion von der Hauptfunktion aus aufrufen:
Ich habe festgestellt, dass ich hier sowohl die Hauptfunktion als auch die Unterfunktion auf asynchrone Funktionen zurückgesetzt habe.
quelle