You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需辅助数组与计数器将Promise.all结果转为键值结构?

如何不依赖辅助数组与计数器将Promise.all结果转为键值结构?

原代码实现

你目前的loadFilterMetaData方法返回Promise数组:

private loadFilterMetaData(): Array<Promise<any>> {
    const country = CatalogCountry.findAll();    
    const firm = CatalogFirm.findAll();    
    const promises = [country, firm];    
    return promises;
 }

当前通过辅助数组和计数器将结果存入Map:

this.metaDataInjectableFilters=['country','firm'];   
const metaData = await Promise.all(metaDataPromises);

let i = 0;
metaData.forEach(resolved => {                                  
    this.metaData.set(
        this.metaDataInjectableFilters[i], 
        resolved
    );
    i++;
})

无需辅助内容的实现方式

方式1:直接在方法中返回键值Map

修改loadFilterMetaData为异步方法,通过解构Promise.all的结果直接构建Map返回:

private async loadFilterMetaData(): Promise<Map<string, any[]>> {
    // 并行执行查询,解构得到对应结果
    const [country, firm] = await Promise.all([
        CatalogCountry.findAll(),
        CatalogFirm.findAll()
    ]);
    // 直接关联键名与结果,返回Map
    return new Map([
        ['country', country],
        ['firm', firm]
    ]);
}

调用时直接赋值:

this.metaData = await this.loadFilterMetaData();

方式2:用对象包裹Promise,转换为键值结果

如果不想修改原方法,可在调用时用对象映射Promise,再转换为键值结构:

// 用对象存储Promise与对应键名
const promiseObj = {
    country: CatalogCountry.findAll(),
    firm: CatalogFirm.findAll()
};

// 将对象转为键值对数组,并行执行后转回对象
const resultObj = Object.fromEntries(
    await Promise.all(
        Object.entries(promiseObj).map(async ([key, promise]) => [key, await promise])
    )
);

// 存入Map
this.metaData = new Map(Object.entries(resultObj));

方式3:扩展原方法返回带键的Promise数组

若需保持原方法返回Promise数组的形式,可修改方法返回包含键和Promise的数组:

private loadFilterMetaData(): Array<Promise<[string, any[]]>> {
    return [
        CatalogCountry.findAll().then(res => ['country', res]),
        CatalogFirm.findAll().then(res => ['firm', res])
    ];
}

调用时直接转换为Map:

const resolvedEntries = await Promise.all(this.loadFilterMetaData());
this.metaData = new Map(resolvedEntries);

这些方式都不需要额外的辅助数组和计数器变量,直接在获取结果的环节完成键名与数据的关联。

内容的提问来源于stack exchange,提问作者Sergei Illarionov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:16:01