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 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
jquery 表单取值常用代码
Dec 22 Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
Jquery实现仿腾讯微博发表广播
Nov 17 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
vue实现输入框自动跳转功能
May 20 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模板技术[转]
2007/01/04 PHP
PHP四大安全策略
2014/03/12 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
基于JSON数据格式详解
2017/08/31 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
详细解读tornado协程(coroutine)原理
2018/01/15 Python
使用python3实现操作串口详解
2019/01/01 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python操作kafka实践的示例代码
2019/06/19 Python
详解python statistics模块及函数用法
2019/10/27 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
兵马俑导游词
2015/02/02 职场文书
2015年人事科工作总结
2015/04/28 职场文书
秋季运动会加油词
2015/07/18 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript
python内置进制转换函数的操作
2021/06/02 Python