在某种情况下,我有一个包含数千件物品的阵列, 首先,我将这个数组分成每组1000个块,然后我调用一个处理数组中第一个块的函数,它返回新的分组块。
// Using lodash
var array = []; // my array with many items
var ids = _.chunk(array, 1000); // grouped array 1000 each
function LoopArrayGroups(ids){
var arrSize = _.size(ids); // number of groups
if(arrSize != 0){
// get First group array,remove it from the list
var toBeUsed = ids[0];
ids.splice(0, 1);
//process first group
myFunction(toBeUsed, function(promise){
if(!promise.error){
// return new array with the first group removed
return ids;
}else{
console.log("Some error " + promise.error);
}
});
}
}
使用分组块数组调用LoopArrayGroups方法,然后处理第一个块,删除它然后返回新的分组块,
我只想循环遍历组数组,直到它们变空。而不是一遍又一遍地调用此功能
答案 0 :(得分:4)
而不是:
return ids;
再次调用main函数:
LoopArrayGroups(ids);
递归调用将在大多数环境中增加每次调用时堆栈的使用,因为目前没有多少JavaScript引擎实现了尾递归优化。
实际上,这意味着如果你有一个巨大的数量的chuncks,你可能会遇到堆栈溢出错误。如果这是一个问题,您应该更改递归调用以使其异步:
setTimeout(LoopArrayGroups.bind(ids), 0);
由于您已经在myFunction
中进行了异步处理,因此实际上没有任何缺点。