Wie kann ich den Wert von einer asynchronen Funktion zurückgeben?
const axios = require('axios');
async function getData() {
const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
return data;
}
console.log(getData());
es gibt mir das zurück,
Promise { <pending> }
Sie können await
nicht außerhalb des async
-Bereichs liegen. Um das erwartete Ergebnis zu erhalten, sollten Sie console.log
in async IIFE einwickeln, d. H
async function getData() {
return await axios.get('https://jsonplaceholder.typicode.com/posts');
}
(async () => {
console.log(await getData())
})()
Worked
sample.
Weitere Informationen zu async/await
Da axios
ein Versprechen zurückgibt, kann der async/await
für die getData
-Funktion wie folgt weggelassen werden:
function getData() {
return axios.get('https://jsonplaceholder.typicode.com/posts');
}
und dann machen Sie dasselbe wie zuvor
(async () => {
console.log(await getData())
})()
ihre Funktion getData gibt ein Versprechen zurück.
Sie können also entweder:
await
auch die Funktion, um das Ergebnis zu erhalten. Um await
verwenden zu können, müssen Sie sich jedoch in einer async
-Funktion befinden, also müssen Sie Folgendes "umbrechen":
async function callAsync() {
var x = await getData();
console.log(x);
}
callAsync();
(Ich habe die Funktion der Klarheit halber benannt, aber in diesem Szenario würde man lieber einen anonymen Funktionsaufruf verwenden; siehe TheReason's answer .)
oder
verwenden Sie das Ergebnis als normales Promise, was eine asynchrone Funktion zurückgibt.
Sie müssen then
mit einem Rückruf verwenden:
getData().then(x => {
console.log(x);
}
Die anderen Antworten haben diese Geldstrafe abgedeckt; Aber ich würde gerne einsteigen und sagen, gewöhnen Sie sich an, eine main
-Funktion zu erstellen und aufzurufen, anstatt Dinge im globalen Bereich auszuführen. d.h.
async main(){
let result = await getData();
}
main().catch(console.log);
Dies ist für jeden, der Ihren Code liest, ziemlich klar, dass dies Ihr Einstiegspunkt in die App ist