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 相关文章推荐
document.getElementById为空或不是对象的解决方法
Jan 24 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
根据当前时间在jsp页面上显示上午或下午
Aug 18 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
Vue ElementUI之Form表单验证遇到的问题
Aug 21 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
element-ui表格数据转换的示例代码
Aug 24 Javascript
js实现旋转的星空效果
Nov 01 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 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之第一天
2006/10/09 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
php实现文件上传基本验证
2020/03/04 PHP
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Python之Web框架Django项目搭建全过程
2017/05/02 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python OpenCV实现视频分帧
2019/06/01 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
关于Assembly命名空间的三个面试题
2015/07/23 面试题
小学教师节活动方案
2014/01/31 职场文书
演讲主持词
2014/03/18 职场文书
通知的写法
2015/04/23 职场文书
Python基础详解之邮件处理
2021/04/28 Python
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS