【讨论】为什么 import() 函数要设计成异步?并返回一个Promise
发布于 6 年前 作者 captainblue2013 5406 次浏览 来自 问答

刚开始看貌似是弥补不能运行时加载、按需加载, 用来实现require()的功能的。

但是为什么要设计成异步、返回Promise,这样没法平滑的替代require(),整个编码结构受到了很大的冲击。

9 回复

结合top await就还好

@yuu2lee4 实际场景却不一定,

不太明白受到了怎样的冲击?所有能用 require 解决的都可以用 import + promise 搞定 设计成异步是必须的啊,比如要加载一个远程模块,需要远程读取另外一个文件的话,同步就卡死了

@andyhu 试试从后端的角度

异步加载的意图主要是用在浏览器环境,因为网络环境复杂,同步加载会浪费等待时间的资源。

服务端环境下,require() 就已经能够满足需求了。运行时和按需加载也可以使用 require(),无须 import

网络资源肯定是异步的呀

@x-cold 是的,所以我觉得这个实现应该可以选择

@captainblue2013 我其实就是后端用的多,一般情况下直接 import from 了,其余的时候用 import() Promise 感觉相当爽,没觉得有什么不方便啊?后端现在 Node 全部支持原生 async await,和 require 能有多大不同呢?

@andyhu 但是原本的module.exports模式,其实只是个wrapper, 你不能直接在顶层require替换成Import(),因为行为的结果不一样,只能在原来按需加载的地方,同时是在async function内部,才能替换。反正是不能无脑替换。

回到顶部