循环循环等待承诺.所有内存泄漏



i运行超过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);
    });
}

您正在为每次迭代一次创建1000个承诺。

我不完全确定您在尝试什么,但我可以想象您正在寻找Bluebird.map()之类的东西。这是一种用设置并发处理很多承诺的方便方式。可能您已经在该循环内部使用剪接以分批处理您的承诺。

这种方法要求您安装和导入蓝鸟:

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);
}

最新更新