前言
对于Node.js的异步控制流,目前共计有四种常用的方式。较为经典的为callback
和EventEmitter
;在ES6中,加入了Promise
;在ES7中加入了async/await
。下面就逐个分析一下这四种常用的异步控制。
callback形式的异步控制
对于callback
形式,即采用回调函数。在理解上,就是函数将任务分配出去,当任务完成之后,然后根据执行结果来进行相应的回调。可以看下面一个例子:
function sleep(ms, callback){
setTimeout(function(){
callback("finish") //执行完之后,返回‘finish’。
}, ms);
}
sleep(1000, function(val){
console.log(val);
});
//输出结果:finish。
这种形式十分容易理解,但是能够解决大部分的问题。但是却存在着致命的缺点。可以想象,如果需要在一段代码中调用多次sleep()
函数,将会出现下面的情况:
var i = 0;//记录sleep()函数调用的次数
function sleep(ms, callback){
setTimeout(function(){
if(i < 2){
i++;
callback("finish", null);
}else{
callback(null, new Error('i大于2'));
}
}, ms);
}
//第一次调用
sleep(1000, <