回调
首先明确一点,回调并非异步调用,回调是一种解决异步函数执行结果的处理方法。在异步调用,如果我们希望将执行的结果返回并且处理时,可以通过回调的方法解决。为了更好的区分回调和异步调用的区别,我们来看一个简单的例子,代码如下:
/**
*文件名:callback.js,Node.js示例代码,说明非异步接口调用的Node.js代码执行过程同样是同步的--
*/
function waitFive(name,function_name){ //定义waitFive方法,该方法回调等待5秒
var pus = 0;
var currentDate = new Date();
while(pus < 5000){ //等待5秒
var now = new Date();
pus = now - currentDate;
}
function_name(name); //执行回调函数
}
function echo(name){ //定义回调函数echo
console.log(name);
}
waitFive("danhuang",echo); //调用waitFive方法
console.log("its over");
从执行结果可以看出,其执行过程是一个同步执行过程。如果是异步执行的话,其执行结果应该是先输出its over,再打印danhuang。
以上代码是一个回调逻辑,但不是一个异步代码逻辑,因为其中并没有涉及Node.js的异步调用接口。从打印结构可以看出回调和异步调用的区别,当waitFive()函数执行时,整个代码执行过程都会等待waitFive()函数的执行,而并非如异步调用那样watiFive未结束,还会继续执行console.log(“its over”)。因此,回调还是一种阻塞式调用。