循环等待 Promise.all 内存泄漏

Jam*_*nes 6 javascript performance node.js promise

我运行了超过 500 000 个 uid 以通过承诺 (promiseUserData(uid)) 获取它们的关联数据。由于某种原因,内存使用情况不会从循环到循环清除。

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

我不知道如何解决这个问题。Promise pooling 也会导致这个问题。

帮助将不胜感激。

谢谢

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);
    });
}
Run Code Online (Sandbox Code Playgroud)

ken*_*tor 1

您为每次迭代同时创建 1000 个承诺。

我不完全确定你在尝试什么,但我可以想象你正在寻找类似的东西Bluebird.map()。这是一种用设定的并发处理大量 Promise 的便捷方法。也许您已经在该循环内部使用 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);
}
Run Code Online (Sandbox Code Playgroud)