是否可以在 EcmaScript 模块中执行延迟导出(例如,在导入脚本中执行一些异步操作之后)?
function do_export() {
export default class AsyncClass {
constructor() {
this.name = "Async Class";
}
}
}
setTimeout(do_export, 500);
最佳答案
不是这样的,import
和export
都应该一次性求值。以后永远不能调用导出。这样想:如果 do_export
被第二次调用会发生什么?
但是 import
可以用作函数:
const promise = import("module-name");
const module_name = await promise;
这意味着您可以将模块的导入推迟到需要时。
如您所愿,延迟导出的替代方法是返回 Promise,这就是 promise 的用途:
export default new Promise((resolve) => {
setTimeout(()=>{
class AsyncClass {
constructor() {
this.name = "Async Class";
}
}
resolve(AsyncClass);
}, 500);
});
现在您可以立即导入模块,但必须等待程序中的值:
import AsyncClass from "./AsyncClass.js";
(async ()=>{
const instance = new (await AsyncClass)();
console.log(instance.name);
})();
关于javascript - EcmaScript 模块 (JavaScript) 中的延迟导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619759/