gpt4 book ai didi

javascript - 具有异步功能的for循环用完内存

转载 作者:行者123 更新时间:2023-11-29 16:16:32 27 4
gpt4 key购买 nike

在你开始大喊“不要将 for 循环与异步函数一起使用!”之前让我声明一下,我确实知道如何使用异步函数编写一个循环,从回调中调用下一次迭代。

但是,如果我对回调不感兴趣,或者只在前任完成后才处理一次迭代,那又怎样呢?在我的例子中,我从 xml 文件导入大量记录并将它们写入 mongoDB。对我的“写”函数的正常调用是这样的:

asyncWrite( record, function(err, result) {
...
});

正如我所说,我对回调(不会发生错误!)或串行过程不感兴趣。所以我使用了一个 for 循环并省略了回调:

for( i=0; i<max; i+=1) {
asyncWrite( record_arr[i] );
}

对于小的 max 这非常有效。但是随着 max 越来越大(> 100.000),我最终得到了一个“内存不足”的错误。防止这种情况的唯一方法是返回到“正常”异步循环(从回调中调用递归函数)。

还有其他想法吗?

最佳答案

在 for 循环完成它的工作之前,异步函数不会被执行。它刚刚收集了一个太乞求的队列。对于大的 max,你会得到 out of memory 错误,因为队列已满。您可以通过在循环内插入 console.log(process.memoryUsage()); 来查看内存泄漏情况。您需要使用 block 来处理此任务。

关于javascript - 具有异步功能的for循环用完内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com