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);
原文地址:https://www.cnblogs.com/fanghao/p/7812777.html