在你开始大喊“不要将 for 循环与异步函数一起使用!”之前 让我声明一下,我确实知道如何使用异步函数编写一个循环,从回调中调用下一次迭代。
但是,如果我对回调或仅在前任完成后处理一次迭代不感兴趣,那该怎么办。就我而言,我从 xml 文件中导入大量记录并将它们写入 mongoDB。对我的“写”函数的正常调用是这样的:
asyncWrite( record, function(err, result) {
...
});
现在正如我所说,我对回调不感兴趣(不会发生错误!)也不对串行过程感兴趣。所以我使用了一个for循环并省略了回调:
for( i=0; i<max; i+=1) {
asyncWrite( record_arr[i] );
}
对于小型来说max
,这非常有效。但随着max
变大(> 100.000),我最终得到一个“内存不足”错误。防止这种情况的唯一方法是返回“正常”异步循环(回调中的递归函数调用)。
还有什么想法吗?