循环等待Promise.all内存泄漏

时间:2017-11-29 13:48:31

标签: javascript node.js performance promise

我运行超过500 000个uid通过promise(promiseUserData(uid))获取其关联数据。由于某种原因,内存使用不会从循环到循环清除。

每个循环使用大约4mb的数据,不会从内存中清除。

我无知如何解决这个问题。承诺汇集也导致了这个问题。

非常感谢帮助。

谢谢

for (var i = 0; i <= numPasses; i++) {
    var subset = uids.splice(0, 1000);

    var userDataArray = [];

    var promises = [];
    subset.map((uid) => {
        promises.push(promiseUserData(uid).then((userData) => {
            if (userData) {
                userDataArray.push(userData);
            }
        }));
    });

    await Promise.all(promises).catch((err) => {
        console.log('Error in Promises.all: ', err);
    });
}

1 个答案:

答案 0 :(得分:0)

每次迭代都会一次创建1000个承诺。

我不完全确定你在尝试什么,但我可以想象你正在寻找像Bluebird.map()这样的东西。使用集合并发处理大量承诺是一种方便的方法。可能你已经在循环中使用了splice,以便批量处理你的承诺。

此方法要求您安装和导入bluebird:

const userDataArray = [];
try {
  await Bluebird.map(uids, async (uid) => {
    const userData = await promiseUserData(uid);
    if (userData) { userDataArray.push(userData); }
  }, { concurrency: 100 })
} catch (err) {
  console.log('Error in Promises.all: ', err);
}