带asynchronous函数的for循环耗尽内存

在开始大喊“不要使用具有asynchronousfunction的循环”之前! 让我说,我知道如何编程循环与asynchronous函数调用callback中的下一个迭代。

但是,如果我对callback不感兴趣,或者只有在前任完成时才处理一个迭代。 在我的情况下,我从XML文件导入大量的logging,并写入到mongoDB。 正常的调用我的“写”function将是这样的:

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

现在正如我所说的,我对这个callback没有兴趣(不会出现错误!),也不会在串行过程中出现。 所以我使用了一个for循环,而忽略了callback:

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

对于max这个完美的作品。 但随着max变大(> 100.000),我最终得到一个“内存不足”的错误。 防止这种情况的唯一方法是回到“正常的”asynchronous循环(callback中的recursion函数调用)。

任何其他的想法?

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