提问人:Ood 提问时间:10/4/2023 最后编辑:Ood 更新时间:10/4/2023 访问量:101
JavaScript - 标准脚本中的顶级等待
JavaScript - Top Level Await In Standard Script
问:
正如这里的答案所指出的,可以在模块的顶层使用,这是现在所有主要浏览器都支持的功能。await
但是,对于常规脚本(不是模块),异步操作之后的所有代码都需要包装在一个函数中。下面是使用 promise 演示这一点的简单示例:
function renderLayout(){
// Simplified for demonstration
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 1000);
});
}
renderLayout().then(() => {
// All code after the promise gets executed in this function
console.log('Done!');
});
我在使用这种方法时面临的问题是,在异步操作之后从函数中执行代码可能是不可取的,例如,因为它为该代码块引入了新的范围或允许使用语句。return
我目前正在开发一个脚本,该脚本对布局执行一些异步更改,并希望脚本的其余部分仅在进行这些更改后才继续,就好像它们是直接在全局范围内执行的,而不是从函数执行的。
我还应该提到,这是模板/预处理系统的一部分,其中异步操作之后的部分是动态生成的,这就是为什么我更喜欢它的“标准”行为。
鉴于这在模块中是可能的,我希望有一种方法可以在常规脚本中实现它。如果有人知道实现这一目标的方法,将不胜感激。
答:
-1赞
Alexander Nenashev
10/4/2023
#1
只需用异步 IIFE 包装整个脚本,这样您就可以“有点”在模块中模拟顶层。您也可以考虑添加,因为模块是延迟的。await
defer
script
评论
return
await
return
eval
<script>