Node.js回调函数事件机制(EventEmitter类)全局对象

Posted 别Null.了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js回调函数事件机制(EventEmitter类)全局对象相关的知识,希望对你有一定的参考价值。

目录

Node.js的回调函数

什么是回调函数

回调函数示例

Node.js的事件机制

EventEmitter类的各种方法

示例:EventEmitter类的on方法

Node.js的全局对象

process对象

process事件


Node.js的回调函数

什么是回调函数

回调函数指的就是一个函数A作为参数传递给一个参数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。

function main(info,callback){   //我是主函数,参数列表中的callback是一个回调函数
   console.log('还在回家的路上');
   console.log('到家了,发条消息吧');
   callback(info);   //调用回调函数
} 
function sendMsg(msg){   //我是回调函数
   console.log(msg);
}
main('亲爱的,我到家了!',sendMsg);   //执行主函数

回调函数示例

const fs=require('fs');  //引入fs模块
//异步读取文件内容
fs.readFile('test.txt',function(err,data){
    if(err){
        return err;   //读取文件失败则报错
    }else{
        console.log(data.toString());   //读取文件成功则输出文件内容
    }
})
console.log("Node程序已经执行结束!")

执行结果

Node.js的事件机制

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断去查询事件队列中的事件消息,然后执行该事件对应的回调函数,有点类似windows的消息映射机制。

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

在Node.js的事件机制中主要有三类角色:事件(Event)、事件发射器(EventEmitter)、事件监听器(EventListener)。

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件。

EventEmitter类的各种方法

event:代表事件名   listener代表事件处理函数

方法名与参数描述
addListener(event,listener) 事件监听函数
on(event, listener)对指定对象绑定事件处理函数(addListener方法的别名)
once(event, listener)对指定对象指定只执行一次的事件处理函数
removeListener(event, listener)删除事件
setMaxListeners(n) 指定对象处理函数的最大数量,n为正数值,代表最大的可指定事件处理函数的数量
listeners(event) 获取指定对象的所有事件处理函数
emit(event, [arg1], [arg2], [...]) 手动触发指定事件

示例:EventEmitter类的on方法

当服务器接收到客户端请求时,在控制台窗口中输出客户端请求的目标地址(URL地址),并使用响应对象的end方法立即结束响应。

var http = require("http");
var server = http.createServer();  //创建服务器
server.on("request",function(req,res){  //绑定事件
    console.log(req.url);
    res.end("Hello World!");
})
server.listen(8080,"127.0.0.1")

在WebStorm中运行此代码,使其监听在8080端口上,打开浏览器输入127.0.0.1.8080即可运行成功。

Node.js的全局对象

Node.js的全局对象是具有全局性的,它们可在所有的模块中应用。我们并不需要在应用中引用这些对象,而可以直接使用它们。

__filename

__filename表示正在执行的代码的文件名。这时此代码文件的解析绝对路径。(当前被执行的文件的全名--->绝对路径+文件名

例如:创建一个js文件名为t2.js,里面的代码为

console.log("文件名为:"+__filename);

__dirname

__dirname表示当前正在执行的脚本所在目录的名称。

例如:创建一个js文件名为t2.js,里面的代码为

console.log("路径名为:"+__dirname);

process对象

process对象是 Node 的一个全局对象,提供当前 Node 进程的信息。它可以在脚本的任意位置使用,不必通过require命令加载。该对象部署了EventEmitter接口。

属性:process对象提供一系列属性,用于返回系统信息。

属性说明
process.argv返回一个数组,成员是当前进程的所有命令行参数
process.env返回一个对象,成员为当前Shell的环境变量
process.installPrefix返回一个字符串,表示Node安装路径的前缀
process.pid返回一个数字,表示当前进程的进程号
process.platform返回一个字符串,表示当前的操作系统,比如Linux
process.title返回一个字符串,默认值为node,可以自定义该值
process.version返回一个字符串,表示当前使用的Node版本

方法 

方法说明
process.chdir()切换工作目录到指定目录
process.cwd()返回运行当前脚本的工作目录的路径

process.exit()

退出当前进程

process.getgid()返回当前进程的组ID(数值)
process.getuid()返回当前进程的用户ID(数值)
process.nextTick()指定回调函数在当前执行栈的尾部,下一次EventLoop之前执行
process.on()监听事件
process.setgid()指定当前进程的组,可以使用数字ID,也可以使用字符串ID
process.setuid()指定当前进程的用户,可以使用数字ID,也可以使用字符串ID

process事件

process对象部署了EventEmitter接口,可以使用on方法监听各种事件,并指定回调函数。

process支持的事件还有:

data事件:数据输出输入时触发

exit事件:进程退出前触发

以上是关于Node.js回调函数事件机制(EventEmitter类)全局对象的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 事件循环

[nodejs基础]eventloop机制图解

Node.js 事件循环

node事件循环

回调函数的使用场合

Node.js 事件循环