浅谈N ode.j s异步编程中回调和异步调用的区别 李 梅(西安欧亚学院,陕西西安710065) 【摘 要】Node.js是一个事件驱动、异步非阻塞的JavaScript平台。异步编程模型是Node.js的主要特色,node.js的很多第三方模块都提供了异 步的API。本文着重阐述了同步调用、异步调用及回调与异步调用的区别,通过案例说明回调函数的用法及执行过程。 【关键词】同步调用:异步调用;回调 【中图分类号】TP311.1 【文献标识码】A 【文章编号】1006—4222(2015)06—0203—01 1同步调用 alert方法。执行结果是P段落没有完全隐藏.alert结果就出来。 同步调用是一种阻塞式调用,一段代码调用另一段代码, ¥(”P”).hide("slow"function()falert(”Theparagraphis・ 必须等待这段代码执行结束并返回结果后代码才能继续执行 nowhidden”)}); 下去。例如软件大赛的时候,共有10道题目,有的同学一道题 上述代码是有回调的.当段落隐藏完成后它就会被调用. 一道题往下做,'3-有一道题卡住没做出来,就一直在做那道题 显示一个alert提示。 目,绝对不会继续做下一道题目,这就如同同步调用的过程, Node.js利用http模块创建http客户端和服务器的时候 一段逻辑没有执行完,其他逻辑不能执行,必须一直等待。 就用到回调函数。代码如下: 2异步调用 、 var http=require('http'); 异步调用是一种非阻塞式调用,一段异步代码未执行完, http.cretaeServer(function(req,res)){ 可以继续执行下一段代码.当代码执行完毕,通过回调返回继 res.writeHead(200,{ Content-Type :'text/plain ; 续执行相应的逻辑。而不耽误其他代码的执行。把这种同一时 res.end( Hello Worldkn'); 间处理多个请求的情况称为异步调用。 J).1isten(1337,”127.0.0.1”); Node.js中很多API的调用模式是异步调用的。JavaScript console.1og( Server urnning at http://127.0.0.1:1337/)': 本身是单线程的,无法异步执行,因此像setTimeout这类 http.ereateServer()接收一个request事件函数,该事件函 JavaScript规范之外的由运行环境提供的特殊函数做的事情 数有两个参数request和response。request对象主要是获取请 是创建一个平行线程后立即返回.让JavaScript主进程可以接 求资源信息,包括请求的url、客户端参数、资源文件、header 着执行后续代码.并在收到平行进程的通知后再执行回调函 信息、H1TrP版本、设置客户端编码等。response对象主要是响 数。除了setTimeout、setInterval这些常见的.这类函数还包括 应客户端请求数据,包括H1rrP的header处理、H,IrrP请求返 Node.JS提供的诸如fs.readFile之类的异步API。例如: 回码、响应请求数据。 setTimeout(unction0{ http.cretaeServer()调用返回的是一个server对象,server console.1og( woad'); 对象拥有listen和close方法。listen方法可以指定监听的IP },1000); 和端口。 console.1og('hello'); 4总结 执行结果为:hello Node.js中很多API的调用模式都是异步调用的。但并非 world ̄ 所有带有回调函数的代码都是异步执行.关键取决于是否代 从执行结果中可以看到虽然先执行setTimeout.但由于该 码逻辑中应用了异步函数。 方法是一个异步函数。因此异步调用并不等待5秒后输出 world。而是先执行输出hello。 参考文献 3回调 [113 ̄t丹华.Node.js开发实战详解[M】.北京:清华出版社,2014. 回调指的是将一个函数作为参数传递给另一个函数,并 【2]赵坤,寸志,雷宗民.Node.js实践【M1.北京:电子工业出版社,2014 [3】陆凌牛.Node.js权威指南.北京:机械工业出版社,2014. 且通常在第一个函数完成后被调用。回调不是异步调用,它是 一种解决异步函数执行结果的处理方法。以下例子很好的解 收稿日期:2015—3—10 释了回调和异步调用的区别。 作者简介:李(1975一),陕西西安人,讲师,硕士,研究方向 ¥(”P”).hide("slow,). 为计算机应用。 alert(”Theparagraphisnowhidden”); 上述代码没有回调.执行顺序是先执行hide方法。再执行 j 律