CNode

【讨论】为什么 import() 函数要设计成异步?并返回一个Promise

问答
Ccaptainblue2013发布于7 年前最后回复7 年前9 回复6516 浏览0 收藏

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

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

查看回复

回复 (9)

X
x-cold#1·7 年前

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

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

B
Binaryify#2·7 年前

网络资源肯定是异步的呀

A
andyhu#4·7 年前
引用 captainblue2013@andyhu 试试从后端的角度

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

C
captainblue2013#5·7 年前
引用 andyhu@captainblue2013 我其实就是后端用的多,一般情况下直接 import from 了,其余的时候用 import() Promise 感觉相当爽,没觉得有什么不方便啊?后端现在 ...

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

Y
yuu2lee4#6·7 年前

结合top await就还好

C
captainblue2013#7·7 年前
引用 yuu2lee4结合top await就还好

@yuu2lee4 实际场景却不一定,

A
andyhu#8·7 年前

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

参与回复
登录后即可参与回复。登录