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 相关文章推荐
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
jQuery下拉美化搜索表单效果代码分享
Aug 25 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
Apr 13 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
DWR3 访问WEB元素的两种方法实例详解
Jan 03 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
Sep 02 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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的cms
2010/12/19 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
讲解Python中的递归函数
2015/04/27 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python内置加密模块用法解析
2019/11/25 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
学生安全责任书
2014/04/15 职场文书
社区科普工作方案
2014/06/03 职场文书
委托公证书样本
2015/01/23 职场文书
美容院员工规章制度
2015/08/05 职场文书