node.js实现回调的方法示例
本文实例讲述了node.js实现回调的方法。分享给大家供大家参考,具体如下:
向回调函数传递额外的参数
在调用函数中,使用匿名函数中实现需传递的参数,再次匿名函数内调用回调函数。
varevents=require("events"); functionCarShow(){ events.EventEmitter.call(this); this.seeCar=function(make){ this.emit('sawCar',make); } } CarShow.prototype.__proto__=events.EventEmitter.prototype; varshow=newCarShow(); functionlogCar(make){ console.log("Sawa"+make); } functionlogColorCar(make,color){ console.log("Sawa%s%s",color,make); } show.on("sawCar",logCar); show.on("sawCar",function(make){ varcolors=["red","blue","black","pink","green"]; varcolor=colors[Math.floor(Math.random()*3)]; logColorCar(make,color); }); show.seeCar("Ferrari"); show.seeCar("Porsche"); show.seeCar("Bugatti");
在回调中实现闭包
如果某个回调函数需要访问父函数的作用域的变量,就需要使用闭包,在函数块内部封装一个异步调用,并传入所需要的变量。
functionlogCar(logMsg,callback){ process.nextTick(function(){ callback(logMsg); }); } varcars=["猎豹","捷达","朗逸"]; for(varidxincars){ varmsg="Sawa"+cars[idx]; logCar(msg,function(){ console.log("NormalCallback"+msg); }); } for(varidxincars){ varmsg="Sawa"+cars[idx]; (function(msg){ logCar(msg,function(){ console.log("ClosureCallback"+msg); }) })(msg); } //NormalCallbackSawa朗逸 //NormalCallbackSawa朗逸 //NormalCallbackSawa朗逸 //ClosureCallbackSawa猎豹 //ClosureCallbackSawa捷达 //ClosureCallbackSawa朗逸
链式回调
使用异步函数时,如果两个函数都在事件队列上,则无法保证它们的运行顺序。解决方法是让来自异步函数的回调再次调用该函数,直到没有更多的工作要做,以执行链式回调。
functionlogCar(car,callback){ console.log("Sawa%$",car); if(cars.length){ process.nextTick(function(){ callback(); }); } } functionlogCars(cars){ varcar=cars.pop(); logCar(car,function(){ logCars(cars); }); } varcars=["猎豹","捷达","朗逸"]; logCars(cars);
希望本文所述对大家nodejs程序设计有所帮助。