Appearance
问题
上次 实现后,发现速度很慢,因为 要聚合 几十次
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秒返回