Generator 本身不是通信机制,而是通过嵌入主应用权限同步流程、配合微前端生命周期与IoC容器,实现可中断恢复的跨应用权限对齐。

直接用 Generator 构建跨应用通信基座并不现实——它本身不是通信机制,而是控制流工具。真正能支撑“异步动态权限对齐”的,是把 Generator 作为调度协程嵌入主应用的权限同步流程中,配合微前端生命周期、服务注册与事件广播,实现可中断、可恢复、带状态的权限拉取→校验→分发→生效全过程。
用 Generator 封装权限同步流程,避免回调嵌套与状态丢失
当用户登录或角色变更后,主应用需依次完成:获取最新权限数据 → 校验子应用注册的服务是否满足新权限契约 → 清理失效路由 → 广播更新事件 → 等待关键子应用就绪后再触发菜单重绘。这一串操作天然具备“阶段性”和“依赖等待”特征,正适合 Generator 分段控制:
- 每个 yield 对应一个异步环节(如
yield fetchPermissions()、yield validateAuthService()),暂停执行直到 Promise resolve - Generator 返回的迭代器可被主应用统一持有,便于在子应用
mounted后主动调用next()推进下一步,实现“按需唤醒” - 若某子应用加载失败或权限校验不通过,可通过
throw中断流程并触发降级逻辑(如显示空白菜单+错误提示),而不阻塞其他子应用
结合 IoC 容器,让权限状态可注入、可监听
Generator 流程中产出的权限数据不能只存在局部变量里,必须沉淀为跨应用可用的状态:
审查 React Router 代码,确保数据加载、变更、错误处理和导航模式符合规范,适用于 React Router v6.4+ 代码、加载器及其他特性。
- 主应用 IoC 容器注册一个
PermissionService单例,提供set(roles)、has(code)、on('change', cb)接口 - Generator 在
yield阶段调用permissionService.set(data),自动触发所有监听子应用的更新(如 Vue 的watchEffect或 React 的useEffect) - 子应用不主动拉取权限,而是通过容器
get('permission')获取实例,并在组件挂载时订阅change事件,实现响应式对齐
利用微前端生命周期驱动 Generator 进程
权限对齐不是一次性动作,而需与子应用启停节奏严格对齐:
立即学习“前端免费学习笔记(深入)”;
- 主应用在 qiankun 的
afterMount钩子中,检查该子应用是否声明了requiresPermission: true,若是,则向 Generator 迭代器传入该子应用标识,触发对应阶段(如yield waitForAppReady('user-center')) - 子应用卸载时,调用
permissionService.unsubscribe(appId),避免内存泄漏和误触发 - URL 参数(如
?role=admin)或 hash 变更可作为 Generator 的外部输入信号,调用next({ trigger: 'url-change' })重启校验流程
不暴露 Generator 给子应用,只暴露语义化 API
子应用开发者无需知道底层用了 Generator。主应用对外只提供简洁接口:
-
window.__MICRO_APP__.waitForPermissionReady()—— 返回 Promise,内部封装了 Generator 的完整执行链 -
usePermissionStore()(Vue)或usePermission()(React)—— 封装好的 Hook,自动订阅变更 -
<PermissionGuard code="system:config:edit">...—— 权限指令/组件,内部调用容器服务判断显隐

















