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 相关文章推荐
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
JavaScript获取onclick、onchange等事件值的代码
Jul 22 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
Nov 09 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
layui实现文件或图片上传记录
Aug 28 Javascript
通过JS深度判断两个对象字段相同
Jun 14 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
php中memcache 基本操作实例
2015/05/17 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
Python 字符串操作方法大全
2014/03/11 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
golang/python实现归并排序实例代码
2020/08/30 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
python实现学生信息管理系统源码
2021/02/22 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
励志演讲稿500字
2014/08/21 职场文书
2014年科技工作总结
2014/11/26 职场文书
担保书格式
2015/01/20 职场文书