Heim >Web-Frontend >js-Tutorial >Warum erscheint „console.log', bevor die Async-Funktion zu „async'-Code der obersten Ebene führt?

Warum erscheint „console.log', bevor die Async-Funktion zu „async'-Code der obersten Ebene führt?

Susan Sarandon
Susan SarandonOriginal
2024-12-17 18:45:18655Durchsuche

Why Does `console.log` Appear Before Async Function Results in Top-Level `async` Code?

Warum erfolgt die asynchrone Ausführung nach der Protokollmeldung in der asynchronen Funktion der obersten Ebene?

Bei async/await wird davon ausgegangen, dass asynchrone Funktionen Versprechen zurückgeben. Wenn jedoch eine asynchrone Funktion auf der obersten Ebene ohne explizite Promise-Verarbeitung verwendet wird, entstehen Komplexitäten.

Verstehen, warum es nicht funktioniert

Das Problem hierbei ist, dass die Hauptfunktion ein Promise zurückgibt , wodurch die Anweisung console.log('outside: ' text) ohne einen sofort auszugebenden Wert gestrandet bleibt. Die async/await-Syntax bewirkt, dass die „Inside“-Nachricht nach der „Outside“-Nachricht protokolliert wird, da sie darauf wartet, dass das von main() zurückgegebene Promise erfüllt wird, bevor fortgefahren wird.

Lösung des Problems

Um den zurückgegebenen Wert ohne explizite then()-Behandlung zu verwenden, haben Sie drei Möglichkeiten:

1. Top-Level-Warten in Modulen

(Verfügbar in modernen Umgebungen mit ES2022-Unterstützung)

const text = await main();
console.log(text);

2. Asynchrone Funktion der obersten Ebene, die niemals ablehnt

(async () => {
try {
const text = await main();
console.log(text);
} catch (e) {
// Handle Promise rejection or async exceptions here
}
})();

3. dann und fangen

main()
.then(text => {
console.log(text);
})
.catch(err => {
// Handle Promise rejection or async exceptions here
});

Das obige ist der detaillierte Inhalt vonWarum erscheint „console.log', bevor die Async-Funktion zu „async'-Code der obersten Ebene führt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn