在開始大喊「不要使用for-loops with async functions!」之前!讓我說我做知道如何編程一個循環與異步函數調用回調中的下一個迭代。具有異步功能的for循環耗盡內存
但是,如果我對回調沒有興趣,或者只有在前任完成時才處理一次迭代。在我的情況下,我從XML文件導入大量記錄並將它們寫入到mongoDB中。我的「寫」 - 函數正常通話會是這樣的:
asyncWrite(record, function(err, result) {
...
});
現在,正如我所說,即時通訊在回調不感興趣(不會發生錯誤!),也不在一個連續的過程。所以我使用了一個for循環,並忽略了回調:
for(i=0; i<max; i+=1) {
asyncWrite(record_arr[i]);
}
對於小型max
這很好。但隨着max
變大(> 100.000),我最終得到'內存不足'的錯誤。防止這種情況的唯一方法是回到'正常'異步循環(回調中的遞歸函數調用)。
還有其他想法嗎?
您正在調用函數asyncWrite(record_arr [i])「。函數的另一個參數在哪裏? – polin
也許嘗試process.nextTick(function(){asyncWrite(record_arr [i]);}); – Chris
@polin:我按意願離開了它,因爲正如我所說的,我不想在回調中處理任何東西。 – heinob