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 处理事件绑定的一些兼容写法
Dec 24 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
浅谈React 属性和状态的一些总结
Nov 21 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
IntelliJ IDEA 安装vue开发插件的方法
Nov 21 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
vue 引入公共css文件的简单方法(推荐)
Jan 20 Javascript
webpack优化的深入理解
Dec 10 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/12/06 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
javascript类型转换示例
2014/04/29 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python中的闭包用法实例详解
2015/05/05 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
一看就懂得Python的math模块
2018/10/21 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
详解Python yaml模块
2020/09/23 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
教师自我评价范例
2013/09/24 职场文书
就业意向书范文
2014/04/01 职场文书
商铺租赁意向书
2014/04/01 职场文书
社区矫正工作方案
2014/06/04 职场文书
销售队伍口号
2014/06/11 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
群众路线剖析材料
2014/09/30 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP