Node回调&事件
Node回调&事件
Node.js 异步编程的直接体现就是回调,异步编程依托于回调来实现
简介
回调函数在任务完成后会被调用,node的所有API都支持回调函数,回调函数提高了Node的性能,可以处理大量的并发请求
举例
var fs = require("fs");
// 同步读取
var data = fs.readFileSync("input.txt");
console.log(data.toString());
console.log("同步读取");
// 异步读取
fs.readFile("input.txt",function (err,data) {
if(err)
return console.error(err);
console.log(data.toString());
});
console.log("异步读取");
/*输出*/
hello world!
同步读取
异步读取
hello world!
事件循环
node使用事件驱动的模型,主循环监听事件,当检测到事件时触发回调函数
//引入events模块
var events = require("events");
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();
//创建事件处理程序
var connectHandler = function () {
console.log("连接成功");
//触发receive事件
eventEmitter.emit('received');
};
//绑定connection事件处理程序
eventEmitter.on("connection",connectHandler);
//用匿名函数创建事件
eventEmitter.on("received",function () {
console.log("数据接收成功");
});
// 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕");
/*输出*/
连接成功
数据接收成功
程序执行完毕
EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。所有这些产生事件的对象都是 events.EventEmitter的实例
//引入events模块
var events = require("events");
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();
eventEmitter.on('event',function () {
console.log('listener1 触发');
});
// 同一个事件可以绑定多个函数
eventEmitter.on('event',function () {
console.log('listener2 触发');
});
var listener3 = function () {
console.log("listener3 触发");
};
// 也可以手动添加
eventEmitter.addListener('event',listener3);
setTimeout(function () {
eventEmitter.emit('event');
},1000);
Node回调&事件的更多相关文章
- node.js事件轮询(1)
事件轮询(引用) 事件轮询是node的核心内容.一个系统(或者说一个程序)中必须至少包含一个大的循环结构(我称之为"泵"),它是维持系统持续运行的前提.nodejs中一样包含这样的 ...
- Node.js 事件
Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...
- Node.js 事件循环(Event Loop)介绍
Node.js 事件循环(Event Loop)介绍 JavaScript是一种单线程运行但又绝不会阻塞的语言,其实现非阻塞的关键是“事件循环”和“回调机制”.Node.js在JavaScript的基 ...
- Node.js事件循环
Node JS是单线程应用程序,但它通过事件和回调概念,支持并发. 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性.Node JS使用观察者模式.Node ...
- node.js零基础详细教程(4):node.js事件机制、node异步IO操作
第四章 建议学习时间3小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- 6、Node.js 事件循环
#########################################################################################Node.js 事件循 ...
- The Node.js Event Loop, Timers, and process.nextTick() Node.js事件循环,定时器和process.nextTick()
个人翻译 原文:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ The Node.js Event Loop, Ti ...
- Node.js事件的正确使用方法
前言 事件驱动的编程变得流行之前,在程序内部进行通信的标准方法非常简单:如果一个组件想要向另外一个发送消息,只是显式地调用了那个组件上的方法.但是在 react 中用的却是事件驱动而不是调用. 事件的 ...
- bootstrap fileinput添加上传成功回调事件
国外牛人做的bootstrap fileinput挺酷的,但是可惜没有提供自定义上传成功回调事件的接口,因此感到非常头疼,但是很幸运的是,我在网上搜索到一个提问帖子,它问到使用Jquery的on函数绑 ...
随机推荐
- eclipse工具下hadoop环境搭建
eclipse工具下hadoop环境搭建: window10操作系统中搭建eclipse64开发系统,配置hadoop的eclipse插件,让eclipse可以查看Hdfs中的文件内容. ...
- 内存栈与堆的区别C#
C# 堆与栈 理解堆与栈对于理解.NET中的内存管理.垃圾回收.错误和异常.调试与日志有很大的帮助.垃圾回收的机制使程序员从复杂的内存管理中解脱出来,虽然绝大多数的C#程序并不需要程序员手动管理内存, ...
- 异象石(就是sdio宝藏那题)
题解: 之前这道题写过两次题解了吧.. 实现的时候可以用set<int,cmp>来实现按照dfn排序 代码: 感觉别人的分类讨论比我的简单.. 但我觉得我这个写起来也不烦就不看别人的了.. ...
- luogu 1471
题意: 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ...
- 经典的XSS案例
在做安全审计的时候,通过常用的<script>alert(1)</script>无法发现该XSS
- css3实现旋转表
如图所示: css部分: <style> #clock{width:100px; height:100px; border-radius:50%; border:4px solid bla ...
- spring开发需要的配置文件
1,applicationContext-dao.xml <?xml version="1.0" encoding="UTF-8"?><bea ...
- Substrings kmp
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
- Tp-validate进阶
阶段1:基础 application/controller/v1/Banner.php <?php namespace app\api\controller\v1; use think\Cont ...
- HDU 6119 小小粉丝度度熊 (区间去重)【尺取】
<题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...