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);