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 相关文章推荐
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
JQuery页面地址处理插件jqURL详解
May 03 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
Jul 26 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
vue实现自定义多选按钮
Jul 16 Javascript
js实现贪吃蛇游戏(简易版)
Sep 29 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之生成GIF动画的实现方法
2013/06/07 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
js闭包实例汇总
2014/11/09 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
元素全屏的设置与监听实例
2017/11/28 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
Python字典简介以及用法详解
2016/11/15 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python3简单实现串口通信的方法
2019/06/12 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Django框架 querySet功能解析
2019/09/04 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
python实现logistic分类算法代码
2020/02/28 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
2014年两会学习心得体会
2014/03/10 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
python process模块的使用简介
2021/05/14 Python