Skip to content
On this page

问题

上次 实现后,发现速度很慢,因为 要聚合 几十次

        for (const key in allFrom) {
            if (allFrom.hasOwnProperty(key)) {
                const number = allFrom[key];
                const groupData = await this.getGroupData(key, number, querys);

                allObj[key] = groupData;
            }
        }

该方法 的 问题 在于 要等 每次 聚合完了 才能 执行 下一条,很影响 速度

解决方案

经过 一段时间后,突发奇想,修改数据结构,从对象格式 改成数组 格式,用 Promise.map 实现 多任务并行 执行

        const Promise = require('bluebird');

        await Promise.map(allFrom,
            async from => {
                const { key, value: number } = from;
                const groupData = await this.getGroupData(key, number, querys);

                allObj[key] = groupData;
            },
            { concurrency: 100 }
        )

预先 做了处理 allFrom 从 对象 改成了 [{key: key1, value:value1}] 的结构

效果

从之前的 20秒 返回 现在 3、4秒返回