promise.all 并发加载核心模块需将动态 import 表达式统一放入数组,确保同时发起 http 请求;其返回 promise 在全部模块加载执行完毕后 resolve 为有序模块数组,再解构调用初始化方法,并建议用 allsettled 或错误兜底提升容错性。

用 Promise.all 并发加载所有核心模块,关键在于把每个模块的加载逻辑统一包装成 Promise,并确保它们能真正并行发起请求(而非串行或被阻塞),同时做好错误处理和结果结构化。
确保每个模块返回标准 Promise
现代模块系统(如 ES Module 动态导入)返回的是 Promise,可直接使用。例如:
-
import('./core/auth.js')→ 返回Promise -
import('./core/api.js')→ 返回Promise -
import('./core/ui.js')→ 返回Promise
注意:不要在数组里写 await import(...),那会变成串行;要保持纯表达式形式。
用 Promise.all 并发触发全部加载
把所有动态 import 表达式放进一个数组,传给 Promise.all:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const coreModules = Promise.all([
import('./core/auth.js'),
import('./core/api.js'),
import('./core/ui.js'),
import('./core/utils.js')
]);
此时浏览器会**同时发起四个 HTTP 请求**(前提是路径不冲突、无跨域限制、服务器支持并发)。coreModules 是一个 Promise,它会在所有模块加载、解析、执行完毕后才 resolve,返回一个按顺序排列的模块对象数组。
解构模块并统一初始化
推荐在 then 或 async/await 中解构并调用各自初始化方法:
coreModules
.then(([auth, api, ui, utils]) => {
// 每个都是 { default: ..., [namedExports] }
auth.default.init();
api.default.setup();
ui.default.render();
utils.default.extend();
console.log('所有核心模块已就绪');
})
.catch(err => {
console.error('某个核心模块加载失败:', err);
// 可触发降级逻辑,如显示错误页、禁用部分功能
});
进阶建议:加超时控制 & 按需 fallback
Promise.all 是“全成功才成功”,任一失败即 reject。若需更强韧性,可结合 Promise.race 加超时,或用封装函数让单个模块失败时不中断整体:
- 用
Promise.allSettled替代(兼容性稍差,但会等全部结束,返回每个状态) - 对每个 import 包一层兜底:
import('./x').catch(() => ({ default: {} })) - 设置加载超时:
Promise.race([import('./x'), new Promise((_, r) => setTimeout(r, 5000))])
实际项目中,还可配合模块预加载(<link rel="modulepreload">)进一步提升并发效率。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










