《Node应用程序构建——使用MongoDB和Backbone》一2.3 事件
本节书摘来自异步社区《Node应用程序构建——使用MongoDB和Backbone》一书中的第2章,第2.3节,作者【美】Mike Wilson,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 事件
Node应用程序构建——使用MongoDB和Backbone
事件是Node.js的活力之源,实际上也是JavaScript本身的活力之源。其他语言在多个并发线程中处理工作流,每个线程都将大部分时间花在等待阻塞的I/O操作上,如磁盘读取、数据库操作或通过网络获取信息。但JavaScript总被认为是一个基于事件的编程模型。早期的事件很简单,如一次鼠标点击、一个页面加载或一次表单提交。更晚期的用法包括完成一次数据库写入,或从磁盘读入文件的内容等事件。
JavaScript利用回调,通过另一种方式来解决问题。程序员编写称为“回调”的特殊函数,让它与特定的事件挂钩,在符合条件时执行,而不是管理长时间运行的进程。例2-1和例2-2的路由例子说明了这一点:Node.js为每个URL设置了特定的响应,然后只在Web浏览器访问这些路由时执行相应的代码。
Node.js包括一个专门的事件库可以供你准备自定义事件。假设你有一个网络应用程序,已经开放给其他开发人员。如果他们想扩展你的工作,有两种选择:基于你的代码创建一些原型函数,并重写所有行为不同的函数,或者直接修改你的代码,构建他们需要的特性。事件给出了第三种选择:在你的代码的特定位置触发一个事件,让所有监听者知道动作已发生,并注入他们自己的行为。
例如,如果你的应用程序包含一个登录功能,你可能有一个OnLoggedIn事件。后继的开发人员可以添加一个监听器来提供额外的功能,如连接到社交网站收集所有与登录者相关的新闻。
例2-6 创建与处理应用程序事件
例2-6展示了怎样将3个无关的事件onApplicationStart、onApplicationRun和onApplicationStop串在一起,产生下面的输出。
在mainLoop函数执行之前,调用eventEmitter的on方法注册了ApplicationStart、ApplicationRun和ApplicationStop事件。这为每一个事件增加了一个事件监听器:从现在起,只要有事件发生,都会检查这些监听器是否匹配,匹配的回调函数将被执行。
屏幕输出突出了Node.js的一个重要特征:所有工作都在单个线程中进行。当事件发生并由回调响应时,调用方法会暂停直到回调执行完毕。这很重要,因为如果在回调期间发生了消耗大量运算资源的事情,原始函数将不会继续执行,直到全部工作完成。所以这个例子的执行遵循以下路线。
1.运行mainLoop,触发ApplicationStartEvent。
2.运行回调onApplicationStart。
3.继续执行mainLoop,触发ApplicationRun。
4.运行回调onApplicationRun。
5.继续执行mainLoop,触发ApplicationStop。
6.运行回调onApplicationStop。
7.回到mainLoop的执行,接下去没什么可做的,停止。
《Node应用程序构建——使用MongoDB和Backbone》一2.3 事件相关推荐
- 《Node应用程序构建——使用MongoDB和Backbone》一第 1 章 介绍与总览1.1 打造一个社交网络...
本节书摘来自异步社区<Node应用程序构建--使用MongoDB和Backbone>一书中的第1章,第1.1节,作者[美]Mike Wilson,更多章节内容可以访问云栖社区"异 ...
- node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序
node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...
- 连接Python 3和Electron/Node.JS:构建现代桌面应用程序
目录 先决条件 第1步--设置开发环境 安装Node.js和NPM 设置Python虚拟环境 创建虚拟环境 第4步--创建Node.js应用程序 如何在Electron和Python之间进行通讯 什么 ...
- react node服务器_适用于初学者的服务器上的React:构建通用的React和Node应用程序...
react node服务器 In this article we are going to learn how to build a simple "Universal JavaScript ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...
- node aws 内存溢出_在AWS Elastic Beanstalk上运行生产Node应用程序的现实
node aws 内存溢出 by Jared Nutt 贾里德·努特(Jared Nutt) 在AWS Elastic Beanstalk上运行生产Node应用程序的现实 (The reality o ...
- 如何在Windows上安装Angular:Angular CLI,Node.js和构建工具指南
In this tutorial, we'll learn how to install Angular CLI in Windows and use it to create an Angular ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- mongodb连接java_如何从Java EE无状态应用程序连接到MongoDB
mongodb连接java 在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池. 如果您开发的REST API对 ...
- 如何从Java EE无状态应用程序连接到MongoDB
在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池. 如果您开发的REST API对MongoDB执行操作,则可 ...
最新文章
- 如何查看别人公众号自定义菜单的功能_如何注册自己的个人公众号?手把手教您开启自媒体赚钱之路?...
- 1322项!这所高校国自然基金立项再创新高 | 附各高校最新统计
- 在Android上实现HttpServer
- vue官方eslint插件配置eslint-plugin-vue-libs
- azure备份存储层分类_如何配置Azure SQL数据库长期保留(LTR)备份
- DVB开发之OTA升级
- 每周荐书:OpenCV、自然语言、SpringBoot2
- web文件服务器1台,WEB服务器及配件1台 - 千里马招标网
- 附加数据库及配置ODBC的方法
- 新版智能广告点击要饭网单页网站源码
- HYSBZ 1406 密码箱
- Swift学习笔记 -- 枚举和结构
- 利用网页内容监控来提升网站收录排名
- python层次分析法案例_在R语言中使用层次分析法-案例1
- 线段树:你能回答这些问题吗
- 一名菜鸟程序员的跳槽经历以及其所感所想(二)
- openwrt mesh网络设置
- 线性代数(九) : 矩阵的行简化阶梯型和标准型
- ensp使用web登录防火墙
- revit相关报错合集
热门文章
- leecode 树是否是平衡树 java
- UVA 12299 - RMQ with Shifts 线段树
- quartus编译出现的问题
- Delphi 与 DirectX 之 DelphiX(63): TDIB.DoPosterize();
- 没使用Spring Cloud的版本管理导致Eureka服务无法注册到Eureka服务注册中心
- redis哨兵配置和redis-cluster搭建
- 编程大讲坛:C#核心开发技术从入门到精通pdf
- Kali Linux桥接模式配置DNS服务器
- vue2.0路由(跳转和传参)经典介绍
- 设计模式 笔记 享元模式 Flyweight