await不支持顶层。标准委员会对此进行了一些讨论,例如有关Github的问题。
在Github上也有一篇关于为什么等待顶级等待的想法不好的想法。他特别建议如果您具有以下代码:
// data.jsconst data = await fetch( '/data.json' );export default data;
现在, 所有
导入文件
data.js都不会执行,直到提取完成,因此所有模块加载现在都被阻止。由于我们习惯于以同步且可预测的方式执行顶级Javascript,因此很难对应用程序模块的顺序进行推理。如果允许这样做,那么知道何时定义函数将变得很棘手。
我的观点
是,仅通过加载模块来产生副作用是不好的做法。这意味着您的模块的任何使用者都将仅通过需要您的模块即可获得副作用。这严重限制了模块的使用位置。顶层
await可能意味着您正在读取一些API或在
加载时 调用某些服务 。 相反,您应该仅导出供消费者按自己的节奏使用的异步函数。



