node.js实现回调的方法示例


Posted in Javascript onMarch 01, 2017

本文实例讲述了node.js实现回调的方法。分享给大家供大家参考,具体如下:

向回调函数传递额外的参数

在调用函数中,使用匿名函数中实现需传递的参数,再次匿名函数内调用回调函数。

var events = require("events");
function CarShow() {
  events.EventEmitter.call(this);
  this.seeCar = function (make) {
    this.emit('sawCar', make);
  }
}
CarShow.prototype.__proto__ = events.EventEmitter.prototype;
var show = new CarShow();
function logCar(make) {
  console.log("Saw a "+make);
}
function logColorCar(make, color) {
  console.log("Saw a %s %s ", color, make);
}
show.on("sawCar", logCar);
show.on("sawCar", function (make) {
  var colors = ["red", "blue", "black", "pink", "green"];
  var color = colors[Math.floor(Math.random()*3)];
  logColorCar(make, color);
});
show.seeCar("Ferrari");
show.seeCar("Porsche");
show.seeCar("Bugatti");

在回调中实现闭包

如果某个回调函数需要访问父函数的作用域的变量,就需要使用闭包,在函数块内部封装一个异步调用,并传入所需要的变量。

function logCar(logMsg, callback) {
  process.nextTick(function () {
    callback(logMsg);
  });
}
var cars = ["猎豹", "捷达", "朗逸"];
for(var idx in cars){
  var msg = "Saw a "+cars[idx];
  logCar(msg, function () {
    console.log("Normal Callback "+ msg);
  });
}
for(var idx in cars){
  var msg = "Saw a "+cars[idx];
  (function (msg) {
    logCar(msg, function () {
      console.log("Closure Callback "+ msg);
    })
  })(msg);
}
//Normal Callback Saw a 朗逸
//Normal Callback Saw a 朗逸
//Normal Callback Saw a 朗逸
//Closure Callback Saw a 猎豹
//Closure Callback Saw a 捷达
//Closure Callback Saw a 朗逸

链式回调

使用异步函数时,如果两个函数都在事件队列上,则无法保证它们的运行顺序。解决方法是让来自异步函数的回调再次调用该函数,直到没有更多的工作要做,以执行链式回调。

function logCar(car, callback) {
  console.log("Saw a %$", car);
  if(cars.length){
    process.nextTick(function () {
      callback();
    });
  }
}
function logCars(cars) {
  var car = cars.pop();
  logCar(car, function () {
    logCars(cars);
  });
}
var cars = ["猎豹", "捷达", "朗逸"];
logCars(cars);

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
window.open()弹出居中的窗口
Feb 01 Javascript
修改发贴的编辑功能
Mar 07 Javascript
50款非常棒的 jQuery 插件分享
Mar 29 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
BootStrap实用代码片段之一
Mar 22 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
Jul 11 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
Feb 21 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 #Javascript
Angular2库初探
Mar 01 #Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 #Javascript
JavaScript两个变量交换值的实现方法
Mar 01 #Javascript
js实现仿购物车加减效果
Mar 01 #Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 #Javascript
js实现拖拽功能
Mar 01 #Javascript
You might like
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
Vue的Options用法说明
2020/08/14 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python批量同步web服务器代码核心程序
2014/09/01 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
python super函数使用方法详解
2020/02/14 Python
银行委托书范本
2014/09/28 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
2019年大学推荐信
2019/06/24 职场文书
导游词之日本富士山
2020/01/06 职场文书
mysql 获取时间方式
2022/03/20 MySQL