node.js 学习随笔

好久不见. 提交于 2020-03-30 04:41:41

node.js 非阻塞型I/O及事件环机制

安装 nodejs.org

Node.js REPL(交互式解释器)

读取:读取用户输入,解析输入了javascript数据结构并存储在内存中

执行:执行输入的数据结构

打印:输出结果

循环:循环操作以上步骤直到用户两次按下ctrl+c按钮退出。

REPL 命令

  • ctrl + c - 退出当前终端。

  • ctrl + c 按下两次 - 退出 Node REPL。

  • ctrl + d - 退出 Node REPL.

  • 向上/向下 键 - 查看输入的历史命令

  • tab 键 - 列出当前命令

  • .help - 列出使用命令

  • .break - 退出多行表达式

  • .clear - 退出多行表达式

  • .save filename - 保存当前的 Node REPL 会话到指定文件

  • .load filename - 载入当前 Node REPL 会话的文件内容。

回调函数

//阻塞代码实例

var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束");

//非阻塞式代码实例
var fs = require("fs");
fs.readFile('input.txt',function(err,data){
if(err) return console.error(err);
console.log(data.toString());
});
console.log("程序执行结束");

第一个实例在文件读取完后才执行完程序。 第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。

阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内

//事件循环
//1.引入events 模块
var events = require('events');
//2.创建 event Emitter 对象
var eventEmitter = new events.EventEmitter();
//创建事件处理程序
var connectHandler = function connected() {
console.log('连接成功');
//触发data_received 事件
eventEmitter.emit('data_received');
}
//3.绑定事件及事件的处理程序
//绑定connection 事件处理程序
eventEmitter.on('connection',connectHandler);
//使用匿名函数绑定data_received 事件
eventEmitter.on('data_received',function(){
console.log("数据接收成功");
});
//4.触发事件
//触发connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕");

 

//EventEmitter 类
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
event.on('some_event',function () {
console.log('some_event 事件触发');
});
setTimeout(function(){
event.emit('some_event');
},1000);

 

//EventEmitter 支持若干个事件监听器
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent',function (arg1,arg2) {
console.log('listen1',arg1,arg2);
});
emitter.on('someEvent',function(arg1,arg2){
console.log('listen2',arg1,arg2);
});
emitter.emit('someEvent','arg1参数','arg2参数');

 

方法 & 描述 

fs.readStream对象

events.EventEmitter 实例

newListener 事件

removeListener 事件

addListener(event,listener) 为指定事件添加一个监听器到监听器数组的尾部

on(event,listener)为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器

once(event,listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。

removeListener(event,listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器,它接受两个参数,第一个是事件名称,第二个是回调函数名称。

removeAllListeners([event]) 移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器

setMaxListeners(n) 默认情况下,EventEmitters 如果你添加的监听器超过10个就会输出警告信息。setMaxListeners 函数用于提高监听器的默认限制的数量

listeners(event) 返回指定事件的监听器数组

emit(event,[arg1],[arg2],[...]) 按参数的顺序执行每个监听器,如果事件有注册监听返回true,否则返回false

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!