如何在主执行上下文中实现Javascript同步执行?
问题解答
可以实现,这个需求可以通过**顶级await(Top-level await)**特性完成。
该特性是ES2022(ES13)正式纳入JavaScript标准的功能,允许开发者在ES模块的顶层作用域直接使用await关键字,不需要将逻辑包裹在自定义async函数中,示例写法如下:
console.log("Loading Assets!") await async1() await async2() // 更多需要等待的异步代码 console.log("Assets Loaded!")
不过顶级await存在两个使用限制:
- 仅支持在ES模块中使用,也就是你的JS文件需要作为模块加载:浏览器中需要给script标签设置
type="module"属性,Node.js环境下需要在package.json中设置"type": "module",普通脚本、CommonJS模块中直接使用顶级await会抛出语法错误。 - 顶级await会阻塞当前模块的加载流程,如果等待的异步任务耗时过长,会导致所有依赖该模块的代码延迟执行,实际使用时需要评估性能影响。
如果你的运行环境不支持ES2022标准,或者无法使用ES模块,可以使用立即执行async函数表达式(IIFE)作为替代方案,不需要额外定义命名的async函数:
(async () => { console.log("Loading Assets!") await async1() await async2() console.log("Assets Loaded!") })()
内容的提问来源于stack exchange,提问作者Dr. Chocolate
相关产品推荐
相关产品推荐

