什么是回调:
回调指的是将一个函数作为参数传递给另一个函数,并且通常在第一个函数完成后被调用;
举例:
function haveBreakfast(food,drink,callback){
console.log('Have breakfast of '+food+','+'drink');
if(callback && typeof(callback)==="function"){
callback();
}
}
要使用haveBreakfast函数,传递被吃的食物和被饮用的饮料两个变量,传递一个函数作为第三个参数。这是一个回调函数,将会在haveBreakfast()函数内被执行。
haveBreakfast('toast','coffee',function(){
console.log('finished breakfast.time to go to work!');
})
运行这一脚本会显示如下输出:
Have breakfast of toast,coffee
finished breakfast.time to go to work!
在这个例子中,回调函数在haveBreakfast()函数完成后做了某件事。确切要做的事情定义在作为回调传递进来的函数中;
回调函数的调用发生在远程服务器发回响应之后而不是之前,回调是Node.js实现网络编程的关键方法,因为回调让代码在其他事件发生的时候能够运行。当事件发生时,我们称为回调被“触发”,从而导致回调函数被调用;
node.js运行在单一的进程中并且要求开发人员使用异步编码的风格。恩......先说一下什么是同步的代码....
同步的代码意味着每一次执行一个操作,在一个操作完成之前,代码的执行会被阻塞,无法移到下一个操作上;
而node.js几乎从不使用这种编码风格,而是异步的调用回调。
同步和阻塞:
这两个术语是可以互换的,指的是代码的执行会在函数返回之前停止,如果某个操作阻塞。那么整个脚本就无法继续。
异步和非阻塞:
这两个术语也是可以互换的,指的是基于回调的,允许脚本并行执行操作的方法。脚本无需等待某个操作的结果才能继续前进,因为操作结果会在事件发生时由回调来处理。使用异步的方法,操作无需一个接一个地发生;
为什么用异步来解决网络问题:
网络经常不是开发人员所能控制的,我们可能要从不同的远程服务器获取代码并且处理许多超出我们所能控制的元素。通过使用异步风格,可以让脚本在网络事件返回时响应。