首页 >web前端 >js教程 >为什么'console.log”出现在顶级'async”代码中的异步函数结果之前?

为什么'console.log”出现在顶级'async”代码中的异步函数结果之前?

Susan Sarandon
Susan Sarandon原创
2024-12-17 18:45:18706浏览

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

为什么顶级异步函数中的日志消息后会发生异步执行?

在 async/await 中,假设异步函数将返回 Promise。然而,当在顶层使用异步函数而没有显式的 Promise 处理时,就会出现复杂性。

理解为什么它不起作用

这里的问题是 main 函数返回一个 Promise ,使 console.log('outside: ' text) 语句陷入困境,没有立即输出的值。 async/await 语法导致“inside”消息在“outside”消息之后被记录,因为它会等待 main() 返回的 Promise 解决后再继续。

解决问题

要在没有显式 then() 处理的情况下使用返回值,您有三个选项:

1。模块中的顶级 Await

(在支持 ES2022 的现代环境中可用)

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

2.永不拒绝的顶级异步函数

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

3.然后赶上

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

以上是为什么'console.log”出现在顶级'async”代码中的异步函数结果之前?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn