3

在尝试移植我们的一些 JS 代码以使用模块时,我遇到了这个我无法解释的特殊情况。我正在设置我的主 JS 文件以对我的主入口点进行动态导入,然后它们又对它们需要的所有文件进行导入。设置将如下所示:

index.js

(async function () {
    await import('./firstLevel1.js');
    await import('./firstLevel2.js');
 })()

firstLevel1.js

(async function () {
    await import('./secondLevel1.js');
    await import('./secondLevel2.js');
})()

firstLevel2.js

(async function () {
    await import('./secondLevel3.js');
    await import('./secondLevel4.js');
})()

由于我正在导入的一些代码是遗留代码,我将 index.js 的脚本标记设置为 async="false" 以确保所有文件都以正确的顺序加载。在这个特定的示例中,我预计加载顺序是 index.js、firstLevel1.js、secondLevel1.js、secondLevel2.js、firstLevel2.js。secondLevel3.js,最后是 secondLevel4.js。但是当我查看 chrome 中的加载顺序时,这就是我所看到的。

在此处输入图像描述

这对我来说变得有问题,因为 JS 加载的顺序不是我想要正确设置我的旧文件的顺序。

为什么我看到的加载顺序与我预期的不同?有没有办法让它们同步加载?

4

1 回答 1

6

这有点讨厌,但它的一种工作方式如下:

in firstLevel?.js,导出一个你将等待的异步函数index.js

index.js

(async function () {
    await (await import('./firstLevel1.js')).default();
    await (await import('./firstLevel2.js')).default();
})();

firstLevel1.js

export default async function () {
    await import('./secondLevel1.js');
    await import('./secondLevel2.js');
};

firstLevel2.js

export default async function () {
    await import('./secondLevel3.js');
    await import('./secondLevel4.js');
};

它可能对您的实际需求没有那么有用,但它确实按您期望的顺序加载模块

于 2019-03-21T08:27:23.287 回答