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 相关文章推荐
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
js与jquery回车提交的方法
Feb 03 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
详解在Vue中如何使用axios跨域访问数据
Jul 07 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
Vue打包后访问静态资源路径问题
Nov 08 Javascript
Vue 中使用 typescript的方法详解
Feb 17 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服务器实现多session并发运行
2006/10/09 PHP
我的群发邮件程序
2006/10/09 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP7新功能总结
2019/04/14 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
jquery淡入淡出效果简单实例
2016/01/14 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python中运行并行任务技巧
2015/02/26 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python实现最短路径的实例方法
2020/07/19 Python
Python ellipsis 的用法详解
2020/11/20 Python
用Python 执行cmd命令
2020/12/18 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
办理居住证介绍信
2014/01/15 职场文书
初中生期末评语大全
2014/04/24 职场文书
关于青春的演讲稿
2014/05/05 职场文书
医院标语大全
2014/06/23 职场文书
商铺门前三包责任书
2014/07/25 职场文书
优质护理心得体会
2016/01/22 职场文书
python使用torch随机初始化参数
2022/03/22 Python
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA