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 相关文章推荐
jQuery 判断元素上是否绑定了事件
Oct 28 Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 Javascript
JS运动基础框架实例分析
Mar 03 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
Node.js学习之查询字符串解析querystring详解
Sep 28 Javascript
判断iOS、Android以及PC端的示例代码
Nov 15 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
js基础之事件捕获与冒泡原理
Oct 09 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 设计模式之观察者模式介绍
2012/02/22 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Python MD5文件生成码
2009/01/12 Python
Python实现的几个常用排序算法实例
2014/06/16 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python datetime中strptime用法详解
2019/08/29 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
男方父母证婚词
2014/01/12 职场文书
信息技术课后反思
2014/04/27 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
基层党员对照检查材料
2014/09/24 职场文书