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 相关文章推荐
js前台判断开始时间是否小于结束时间
Feb 23 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
javascript事件冒泡和事件捕获详解
May 26 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
Oct 05 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
jQuery实现放大镜案例
Oct 19 jQuery
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
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
JS如何生成动态列表
2020/09/22 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
python openpyxl使用方法详解
2019/07/18 Python
Django 框架模型操作入门教程
2019/11/05 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
人事助理岗位职责
2013/11/18 职场文书
员工合理化建议书
2014/05/19 职场文书
投标诚信承诺书
2014/05/26 职场文书
个人买房协议书范本
2014/10/06 职场文书
单位婚育证明范本
2014/11/21 职场文书
电力工程合作意向书
2015/05/11 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL