2014-04-01 25 views
2

我想要處理一個數組,並在每一行上設置一個新的屬性。循環10K數組表示錯誤超過最大調用堆棧大小

_async.mapLimit(collection, 100, function (row, cb){ 
     row.type = "model"; 
     cb(null, row); 
}, function (err, collection){ 
     if(err) throw(err); 
     console.log(collection); 
}); 

然後我得到這個錯誤:

RangeError: Maximum call stack size exceeded 

這是什麼?我嘗試使用async eachSeries,但發生同樣的情況。

+2

可能不會是'cb'功能再次調用循環,使其遞歸調用? –

+2

根據異步文檔,迭代器方法具有回調函數:https://github.com/caolan/async#mapLimit – user3175226

+2

您在回調中沒有執行任何異步操作,因此您不可以用'for'替換它,循環遍歷數組? – JohnnyHK

回答

7

async庫期望您在回調中執行異步操作,這將使堆棧在等待異步操作完成時展開。

如果你只需要對每個元素進行同步處理,只是用一種for循環:

for (var i=0; i<collection.length; ++i) { 
    collection[i].type = 'model'; 
} 
相關問題