diff --git a/packages/loader/src/resource-deserialize/resources/parser/HierarchyParser.ts b/packages/loader/src/resource-deserialize/resources/parser/HierarchyParser.ts index 4930a04522..2f7cf234ef 100644 --- a/packages/loader/src/resource-deserialize/resources/parser/HierarchyParser.ts +++ b/packages/loader/src/resource-deserialize/resources/parser/HierarchyParser.ts @@ -24,7 +24,7 @@ export default abstract class HierarchyParser void; reject: (reason: any) => void; - } + }[] >(); constructor(public readonly context: V) { @@ -60,17 +60,17 @@ export default abstract class HierarchyParser { const entitiesConfig = this.context.originalData.entities; const entityConfigMap = this.context.entityConfigMap; - const entitiesMap = this.context.entityMap; + const entityMap = this.context.entityMap; const engine = this._engine; const promises = entitiesConfig.map((entityConfig) => { - entityConfigMap.set(entityConfig.id, entityConfig); - + const id = (entityConfig as IStrippedEntity).strippedId ?? entityConfig.id; + entityConfig.id = id; + entityConfigMap.set(id, entityConfig); return this._getEntityByConfig(entityConfig, engine); }); - return Promise.all(promises).then((entities) => { for (let i = 0, l = entities.length; i < l; i++) { - entitiesMap.set(entitiesConfig[i].id, entities[i]); + entityMap.set(entitiesConfig[i].id, entities[i]); } return entities; @@ -240,7 +240,11 @@ export default abstract class HierarchyParser { + cb.resolve(context); + }); return entity; }) ); @@ -250,7 +254,9 @@ export default abstract class HierarchyParser((resolve, reject) => { - this.prefabPromiseMap.set((entityConfig).prefabInstanceId, { resolve, reject }); + const cbArray = this.prefabPromiseMap.get((entityConfig).prefabInstanceId) ?? []; + cbArray.push({ resolve, reject }); + this.prefabPromiseMap.set((entityConfig).prefabInstanceId, cbArray); }).then((context) => { const { entityId } = entityConfig.prefabSource;