Speichern Async/Await response in eine variable
Ich versuche zu verstehen, asynchrone Aufrufe mit async/await und try/catch.
Im Beispiel unten, wie kann ich meine erfolgreiche Antwort auf eine variable genutzt werden kann, während der rest des Codes?
const axios = require('axios');
const users = 'http://localhost:3000/users';
const asyncExample = async () =>{
try {
const data = await axios(users);
console.log(data); //200
}
catch (err) {
console.log(err);
}
};
//Save response on a variable
const globalData = asyncExample();
console.log(globalData) //Promise { <pending> }
globalData
sollte nichtundefined
sollte es einPromise
(das ist das einzige, was ein async-Funktion zurückgeben kann).- Beachten Sie, dass
async
/await
sind nicht "ecmascript-6" (richtig: ECMAScript 2015). Sie wurden in der ES2017, zwei Jahre später. - Aber beachten Sie, selbst wenn Sie warten, bis die Versprechen zu lösen, dessen Auflösung wird der Wert
undefined
. Machen Sie etwas anderes, müssen Siereturn
in IhremasyncExample
Funktion. - Ich bearbeitet die Frage, Entschuldigungen für das verlassen des alten Kommentar sagen 'undefined'. Wie würden Sie gehen über das speichern der Antwort in einer Variablen, die verwendet werden können, die anderswo in den Anwendungsbereich der gleichen Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) Return etwas von Ihrem
asyncExample
Funktion2) - Aufruf, der Funktion und handhaben die zurückgegebenen
Promise
:Warum sollten Sie es handhaben wie das?
Können Sie nicht tun top-level -
await
(es gibt ein Vorschlag für die es aber) -await
muss vorhanden sein, innerhalb einerasync
Funktion.Kennzeichnet eine Funktion als
async
dazu, dass es für die Rückgabe einerPromise
. Sie behandeln können, dassPromise
auf der top-Ebene nur in Ordnung, so wie ich oben.async
/await
alle dem Weg nach unten: pastebin.com/i6FPUs2y (aber es ist wichtig, dass alle der code in dieser Hülle ist intry
/catch
-- ohne, werden Sie sich einzurichten für "Unbehandelte Ablehnung" - Fehler).try
/catch
(oder mit.catch
auf das Ergebnis) ist nicht optional.try/catch
innerhalb IhrerasyncExample
Funktion. Wenn es nicht gelingt, die top-level -.catch()
- handler wird ausgelöst, mit dem entsprechenden Fehler..then
Rückruf. FWIW, ich würde raten, die OP, einfach zu akzeptieren eine andere Antwort, anstatt mir da die IIFE tricks sind weit mehr succint und angemessen in Bezug auf die OP.try..catch
erstellt einen neuen block scope. Verwendenlet
zu definierendata
vortry..catch
stattconst
,return
data
vonasyncExample
FunktionsaufrufJS:
//return globalData
, Kette.then()
zu den async-Pfeil Funktion und Aufgaben mit der übergebenen Arguments an die Funktion übergeben.then()
Weil die Ereignisse passiert sind asynchron, Sie müssen binden in einem callback/Versprechen. Ich nehme an, es gibt ein Versprechen.
async
Funktion. Per definition, es gibt ein Versprechen. Aber es gibt keinen guten Grund, eine Frage zu beantworten, mit einer grundlegenden Falschaussage der Tatsache (dassglobalData
bleibtundefined
, die es nicht mit dem code in der Frage) bis zu/es sei denn, der OP klärt.asyncExample
nichts zurückgibt. Was erwarten Sie sich von derconsole.log(success)
Linie log? Es wird logundefined
. Die OP mussreturn
diedata
von der Funktion.then
callback geschrieben wird, als handele es sich um eine NodeJS-Rückruf (aber rückwärts). Eine wahrethen
Rückruf erhält nie mehr als einen parameter.Verwenden Sie einfach einen Rückruf/das Versprechen (cascading Programmierung):