总结: 阻塞按是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。
Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
绑定事件处理程序:
eventEmitter.on('eventName', eventHandler);
通过程序触发事件:
eventEmitter.emit('eventName');
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
EventEmitter 定义了一个特殊的事件 error,它包含了"错误"的语义,我们在遇到 异常的时候通常会发射 error 事件。
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。 原因:
方法1: 创建长度为10字节的Buffer实例
let buf = new Buffer(10) //涉及安全问题
//使用Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from()
let buf = Buffer.alloc()
方法2: 通过给定的数组创建Buffer实例
let buf = new Buffer([10,20,30,40,50])
方法3: 通过一个字符串来创建Buffer实例
let buf = new Buffer("www.giluo.live","utf-8")
utf-8 是默认的编码方式,此外它同样支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。
语法:
**buf.write(string[, offset[, length]][, encoding])**
参数: 参数描述如下:
string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 'utf8' 。
返回值: 返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。
语法:
buf.toString([encoding[,start[,end]]])
参数
encoding - 使用的编码。默认为 'utf8' 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
返回值:
解码缓冲区数据并使用指定的编码返回字符串。