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 03 Javascript
javascript break指定标签打破多层循环示例
Jan 20 Javascript
javascript学习笔记(一)基础知识
Sep 30 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
原生js实现图片轮播特效
Dec 18 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
ng-alain表单使用方式详解
Jul 10 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
php查询内存信息操作示例
2019/05/09 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
Linux常见面试题
2016/10/04 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
2016年会开场白台词
2015/06/01 职场文书
勤俭节约主题班会
2015/08/13 职场文书