什么是在数组(或objs)上迭代异步的最聪明/最干净的方法?
多数民众赞成我怎么做:
function processArray(array, index, callback) {
processItem(array[index], function(){
if(++index === array.length) {
callback();
return;
}
processArray(array, index, callback);
});
};
function processItem(item, callback) {
// do some ajax (browser) or request (node) stuff here
// when done
callback();
}
var arr = ["url1", "url2", "url3"];
processArray(arr, 0, function(){
console.log("done");
});
这有什么好处吗?如何避免那些意大利面条的代码?
回答如下:检查async库,它是为控制流(异步的东西)而制作的,它有很多方法用于数组的东西:每个,过滤器,地图。查看github上的文档。这是你可能需要的:
每个(arr,迭代器,回调)
将迭代器函数并行应用于数组中的每个项目。使用列表中的项目调用迭代器,并在完成时调用它。如果迭代器将错误传递给此回调,则会立即调用each
函数的主回调并显示错误。
eachSeries(arr,iterator,callback)
与each
相同,只有迭代器应用于数组中的每个项目。只有当前的迭代器完成处理后才会调用下一个迭代器。这意味着迭代器函数将按顺序完成。