wake-up-neo.com

Wie gibt man Werte von asynchronen Funktionen mit async-await von Funktionen zurück?

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> }
7
King Rayhan

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())
})()
12
The Reason

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); 
    }
    
2
Pac0

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

1
Meirion Hughes