fix(editor): getTMagicApp中对runtime-ready可能存在多次事件监听

This commit is contained in:
roymondchen 2025-05-21 16:18:12 +08:00
parent 1f7ad2fbb8
commit 444858491d

View File

@ -215,6 +215,8 @@ export const initServiceEvents = (
((event: 'update:modelValue', value: MApp | null) => void), ((event: 'update:modelValue', value: MApp | null) => void),
{ editorService, codeBlockService, dataSourceService, depService }: Services, { editorService, codeBlockService, dataSourceService, depService }: Services,
) => { ) => {
let getTMagicAppPrimise: Promise<TMagicCore | undefined> | null = null;
const getTMagicApp = (): Promise<TMagicCore | undefined> => { const getTMagicApp = (): Promise<TMagicCore | undefined> => {
const renderer = editorService.get('stage')?.renderer; const renderer = editorService.get('stage')?.renderer;
if (!renderer) { if (!renderer) {
@ -225,19 +227,25 @@ export const initServiceEvents = (
return Promise.resolve(renderer.runtime.getApp?.()); return Promise.resolve(renderer.runtime.getApp?.());
} }
return new Promise<TMagicCore | undefined>((resolve) => { if (getTMagicAppPrimise) {
return getTMagicAppPrimise;
}
getTMagicAppPrimise = new Promise<TMagicCore | undefined>((resolve) => {
// 设置 10s 超时 // 设置 10s 超时
const timeout = globalThis.setTimeout(() => { const timeout = globalThis.setTimeout(() => {
resolve(void 0); resolve(void 0);
}, 10000); }, 10000);
renderer.on('runtime-ready', () => { renderer.once('runtime-ready', () => {
if (timeout) { if (timeout) {
globalThis.clearTimeout(timeout); globalThis.clearTimeout(timeout);
} }
resolve(renderer.runtime?.getApp?.()); resolve(renderer.runtime?.getApp?.());
}); });
}); });
return getTMagicAppPrimise;
}; };
const updateStageNodes = (nodes: MComponent[]) => { const updateStageNodes = (nodes: MComponent[]) => {