在顶层使用 async/await
问题:
为什么会出现以下情况代码不有效吗?
async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text);
答案:
代码不起作用的原因是 main 返回一个承诺。所有异步函数都返回 Promise。
要在顶层使用 async/await,有三个选项:
1。模块中的顶级等待:
在 ES2022 中,可以在模块中使用顶级等待。这允许您在模块顶部使用await 语法。但是,在您等待的承诺解决之前,模块将不会完成加载。如果承诺被拒绝,模块将无法加载。
const text = await main(); console.log(text);
2.从不拒绝的顶级异步函数:
使用从不拒绝的顶级异步函数(除非您想要“未处理的拒绝”错误):
(async () => { try { const text = await main(); console.log(text); } catch (e) { // Handle errors } })();
3. then 和 catch:
使用 .then() 和 .catch() 处理 main 返回的 Promise:
main() .then(text => { console.log(text); }) .catch(err => { // Handle errors });
请注意,所有三个选项都需要处理 Promise 拒绝或异步异常,因为没有调用者可以将它们传递给。
以上是为什么顶级 Async/Await 在 JavaScript 中不起作用以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!