对于一个异步的函数,为什么我们需要同步实现呢。
好比你需要统计平均分,班上30个同学,每个人在一张小纸条写下各自分数,有人写的快,有人写得慢,你需要计算,就必须等待所有人都写好。
每个人写是异步的,但是你需要等待所有人都写好。
这是一种情况。
再比如,你需要打电话给C,可惜你只有B的电话,B有C的电话,这时候你打电话给B,B说等下发C的电话号码给你,这时候你必须得等B将C的号码发来,才能经行下一步。
这是第二种情况。
使用Async
第一种情况
var functionArray=[
function(callback){
callback(err,data);
}
];
var done=function(err,data){
};
async.parallel(functionArray,done);
//async.each 等等
第二种
async.waterfall([
function (callback) {
callback(null, result);
},
processData
], done)
更多的看看官方文档即可。想到的都有。
使用Promise来实现(以bluebird为例)
第一种
var promiseCollections;
Promise.all(promiseCollections).then(function() {
console.log("all done");
});
第二种
Promise.mapSeries(promiseCollections).then(function() {
console.log("all done");
})
顺带提一下, promise.map与promise.all区别在于,前者会将每个处理promise根据设置把多少个promise保存在内存里。
reduce用于归纳(累积)。
any/some/props,几个是满足了条件的(fulfilled)
race,竞争(ES6 only)