javascript - EcmaScript 模块 (JavaScript) 中的延迟导出

标签 javascript ecmascript-6 import module export

是否可以在 EcmaScript 模块中执行延迟导出(例如,在导入脚本中执行一些异步操作之后)?

function do_export() {
    export default class AsyncClass {
        constructor() {
            this.name = "Async Class";
        }
    }
}

setTimeout(do_export, 500);

最佳答案

不是这样的,importexport 都应该一次性求值。以后永远不能调用导出。这样想:如果 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/

相关文章:

javascript - 无法测试 ng-template 中的输入

javascript - 你可以或者应该在 Redux 的初始状态下使用 localStorage 吗?

javascript - Open Shift中如何修改 Node 启动命令?

javascript - AJAX 不发送所选选项的当前值

javascript - 如何在wordpress主题中从cdn添加外部js文件和jq库?

javascript - 用户界面自动化:iPhone app - how to tap "OK" button when an alert appears

javascript - Javascript ES6 的属性和支持值命名约定

mysql - JetBrains DataGrip中如何将CSV数据导入MySQL

python - 如何导入可通过 url 访问的 python 模块

excel - 将带有UTF-8特殊字符的txt文件导入xlsx