那就是我的做法:
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"); });
有什么好处吗?如何避免那些意粉般的代码?
检出异步库,它用于控制流(异步内容),并且它有很多用于数组内容的方法:每种方法,过滤器,映射。查看github上的文档。这可能是您需要的:
每个(arr,迭代器,回调)
将迭代器函数并行应用于数组中的每个项目。调用迭代器时,将使用列表中的项目以及完成时的回调。如果迭代器将错误传递给此回调,则该each函数的主回调将立即被错误调用。
each
eachSeries(arr,迭代器,回调)
与each仅将迭代器应用于序列中数组的每个项目相同。仅当当前迭代器完成处理后,才调用下一个迭代器。这意味着迭代器功能将按顺序完成。