async.js 是我最喜欢的异步控制模块, 主要原因是用 async 写出来的代码相对如用 step.js 写出来的代码可读性更强. async.parallel, async.waterfall 这些API的命名也很形象.
近日想在浏览器端并发进行多个ajax请求, 于是便想把 async.js 放在浏览器端代码中, 可是一看源码才发现文件相对于我的需求而言--略大, 只好自己写个简化版的只支持 async.parallel.
1L 2L 提到的bug已经修复
https://gist.github.com/2016922
// This is an lite version of `async`, see https://github.com/caolan/async
//
// es5shim.js is required for old version browsers
//
// Author: Gui Lin
// Email: guileen[@gmail](/user/gmail).com
var async = {};
if (typeof module !== 'undefined' && module.exports) {
module.exports = async;
}
// example:
//
// async.parallel([
// function(_callback) {
// loadUser(uid, _callback);
// }
// , function(_callback) {
// loadBook(bookId, _callback);
// }
// ], function(err, results) {
// var user = results[0]
// , book = results[1]
// ;
// console.log(user);
// console.log(book);
// })
async.parallel = function (tasks, callback) {
var results = [], count = tasks.length;
tasks.forEach(function(task, index) {
task(function(err, data) {
results[index] = data;
if(err) {
callback(err);
callback = null;
}
if(--count === 0 && callback) {
callback(null, results);
}
});
});
}