Javascript 带有异步函数的for循环耗尽内存

Javascript 带有异步函数的for循环耗尽内存,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在您开始高喊“不要使用异步函数的循环!”之前,让我声明我知道如何使用异步函数编程循环,从回调中调用下一次迭代 但是,如果我对回调不感兴趣,或者只在前一个迭代已经完成的情况下才处理一个迭代,又会怎样呢。在我的例子中,我从一个xml文件导入大量记录,并将它们写入mongoDB。对我的“write”函数的正常调用如下: asyncWrite( record, function(err, result) { ... }); 正如我所说,我对回调(不会发生错误!)和串行过程都不感兴趣。因此,我使

在您开始高喊“不要使用异步函数的循环!”之前,让我声明我知道如何使用异步函数编程循环,从回调中调用下一次迭代

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

asyncWrite( record, function(err, result) {
    ...
});
正如我所说,我对回调(不会发生错误!)和串行过程都不感兴趣。因此,我使用了for循环并省略了回调:

for( i=0; i<max; i+=1) {
    asyncWrite( record_arr[i] );
}
对于(i=0;i 100.000),我最终得到一个“内存不足”错误。防止这种情况发生的唯一方法是返回“正常”异步循环(回调中的递归函数调用)


还有其他想法吗?

在for循环完成其工作之前,将不会执行异步函数。它刚刚收集了一个太长的队列。对于big
max
,您的
内存不足
错误,因为队列已满。您可以通过插入
console.log(process.memoryUsage())来查看内存泄漏情况循环内部。您需要使用块来处理此任务。

您正在以“asyncWrite(record_arr[i])的形式调用该函数。函数的其他参数在哪里?可以尝试process.nextTick(函数(){asyncWrite(record_arr[i]);})@波林:我故意漏掉了它,因为,正如我所说的,我不想处理回调中的任何内容。@Chris:这会有帮助吗?我认为这只把问题向前推进了一步。排队满座的问题不会消失,不是吗?