![](/img/trans.png)
[英]Javascript Function returns undefined after for-loop runs the first time
[英]for-loop with async function runs out memory
在开始大喊“不要对异步函数使用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());
查看内存泄漏的方式console.log(process.memoryUsage());
在循环内部。 您需要使用块来处理此任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.