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的原理和实现技巧介绍
Nov 08 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
php基于redis处理session的方法
Mar 14 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
vue项目引入ts步骤(小结)
Oct 31 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP生成静态页
2006/11/25 PHP
php whois查询API制作方法
2011/06/23 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
如何使用angularJs
2017/05/08 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
Python中threading模块join函数用法实例分析
2015/06/04 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
亮剑精神演讲稿
2014/05/23 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
影视后期实训报告
2014/11/05 职场文书
被告代理词范文
2015/05/25 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技