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中Date对象的getDay方法使用指南
Dec 22 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
微信小程序五星评分效果实现代码
Apr 06 Javascript
bootstrap警告框示例代码分享
May 17 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
如何根据业务封装自己的功能组件
Apr 19 Javascript
Vue组件通信的几种实现方法
Apr 25 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图片上传代码
2013/11/04 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
JS 控制CSS样式表
2009/08/20 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
简单实现python画圆功能
2018/01/25 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
python仿抖音表白神器
2019/04/08 Python
Python中内建模块collections如何使用
2020/05/27 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
银行会计职员个人的自我评价
2013/09/29 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
活动总结范文
2014/08/30 职场文书
可怜妈妈观后感
2015/06/09 职场文书
redis实现排行榜功能
2021/05/24 Redis
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技