理解Node.js的回调(Callback)
2014-11-21 19:01
369 查看
一、回调
回调(Callback)是javascript中常用的使用方法,简单而言,就是:函数作为参数传递到另一个函数中,然后被调用。
同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。
一个简单的栗子,
另一个例子是使用http模块创建http客户端和服务器,http.get()方法用来请求Web服务器并获得相应数据。
回调函数的调用发生在远程服务器发回响应之后,由于代码必须进入网络获取数据,无法确切知道数据何时返回。
回调可以让代码在其他事件发生时能够运行,当事件发生时,回调被触发(fired),从而导致回调函数被调用。
二、同步阻塞和异步非阻塞
所谓同步,即每次执行一个操作,在一个操作完成之前,代码的执行会被阻塞,无法继续下一个操作。所谓异步(非阻塞),指的是基于回调、允许脚本并行执行操作的方法,操作结果会在事件发生时由回调来处理,从而无需等待某个操作的结果继续下一步。
而为了在网络和I/O操作中处理并发,Node.js运行在单一进程并使用异步编码风格。
三、事件循环
时间循环可以将回调函数先保存起来,当事件将来再次发生在运行。无论是数据库返回数据还是http请求返回数据,回调函数的执行被推迟到事件的发生之后。JavaScript的事件循环特性对于基于浏览器的交互是个良好选择,预测事件何时发生不太现实。Node.js将这一方法用到服务器端的网络和I/O操作中。
回调(Callback)是javascript中常用的使用方法,简单而言,就是:函数作为参数传递到另一个函数中,然后被调用。
同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。
一个简单的栗子,
var fs=require('fs'); //请求调用fs(filesystem)模块,在脚本使用 fs.readFile('filename.txt','utf8',function(err,data){ //前两个参数分别为路径和文件编码,第三个参数为回调函数 if(err) throw err; //如果读取文件有误,抛出错误 console.log(data); //否则,来自文件的数据会显示在控制台上 });
另一个例子是使用http模块创建http客户端和服务器,http.get()方法用来请求Web服务器并获得相应数据。
回调函数的调用发生在远程服务器发回响应之后,由于代码必须进入网络获取数据,无法确切知道数据何时返回。
回调可以让代码在其他事件发生时能够运行,当事件发生时,回调被触发(fired),从而导致回调函数被调用。
var http=require('http'); //请求http模块 http.get({host:'baidu.com'},function(res){ //参数1获取主页,参数2为回调函数,其参数响应 console.log("Got response:"+res.statusCode); //远程服务器返回响应时,触发此匿名回调函数 }).on('error',function(e){ console.log("Got error:"+e.message); });
二、同步阻塞和异步非阻塞
所谓同步,即每次执行一个操作,在一个操作完成之前,代码的执行会被阻塞,无法继续下一个操作。所谓异步(非阻塞),指的是基于回调、允许脚本并行执行操作的方法,操作结果会在事件发生时由回调来处理,从而无需等待某个操作的结果继续下一步。
而为了在网络和I/O操作中处理并发,Node.js运行在单一进程并使用异步编码风格。
三、事件循环
时间循环可以将回调函数先保存起来,当事件将来再次发生在运行。无论是数据库返回数据还是http请求返回数据,回调函数的执行被推迟到事件的发生之后。JavaScript的事件循环特性对于基于浏览器的交互是个良好选择,预测事件何时发生不太现实。Node.js将这一方法用到服务器端的网络和I/O操作中。
相关文章推荐
- Node.js的process.nextTick(callback)理解
- JS 回调(CallBack)
- java "回调【 Callback 】" 的理解和使用<借鉴>
- java "回调【 Callback 】" 的理解和使用<借鉴>
- 新手入门:理解Node.js的异步非阻塞I/O模型
- node.js的新手向理解
- 再谈js回调函数callback
- node.js 和v8的理解
- JavaScript回调(callback)函数概念自我理解及示例
- nodejs assert断言的简单理解
- node.js module初步理解
- JS 回调(CallBack)
- node.js callback
- 理解Node.js的异步非阻塞I/O模型
- JS 回调(CallBack)
- 理解Node.js异步非阻塞I/O模型
- 简单理解Node.js
- 我理解的Node.js
- 理解Mixu对node.js事件轮询的说法
- javascript/node.js 中 setTimeout(callback,delay) 中的 this