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程序设计有所帮助。