Node.js:REPL、回调函数、事件循环

发布于:2025-07-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

REPL

  • Node.js REPL表示一个电脑的环境,类似于Windows系统终端或者Linux shell
  • 自带的交互式解释器可用执行以下任务:

读取(读取用户输入)
执行(执行输入的命令)
打印(打印结果)
循环(循环操作,直到用户按两下ctrl-c退出)


简单的表达式计算

在命令行中可以执行加减乘除


使用变量

x = 10

多行表达式

node.js支持多行表达式,类似于js,会自动判断是否已经是一个完整的表达式


下划线_变量

使用下划线——获取上一个表达式的运算结果

Node.js回调函数

Node.js异步编程的直接体现就是回调。
异步编程依托于回调来实现,但是不能说使用回调后程序就异步化了
回调函数在完成任务之后就会被停用,Node使用了大量的回调函数,Node所有的api均支持回调函数


阻塞代码

阻塞代码指的是按照顺序进行运行的代码,只有当前一个代码运行结束之后,后一部分代码才开始执行

let fs = require("fs");
let data = fs.ReadFileSync("input.txt");
console.log(data.toString());
console.log("程序执行结束!");

你好世界!
程序执行结束!


非阻塞代码

非阻塞代码指的是不需要等待文件读取完,这样子可以读取文件的同时执行接下来的代码

let fs = require("fs");
fs.readFile("input.txt",function(error,data){
    if(error != null){
        return console.log(error);
    }else{
        console.log(data.toString());
    }
});
console.log("程序执行结束!");

非阻塞进程是不按照顺序进行运行的,如果需要处理回调函数的参数,我们需要在回调函数内进行写代码

Node.js事件循环

  • Node.js是单进程单线程的应用程序,但是因为V8引擎提供了异步执行的回调接口,因此可以处理大量并发,性能非常高。
  • Node.js几乎每一个API都是支持回调函数的
  • Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
  • Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

事件驱动程序

  • Node.js使用事件驱动模型,当web server接收到请求,就将他关闭然后进行处理,再去服务下一个web请求。
  • 当某个请求完成,会被放回处理队列,当到达队列开头,这个结果被返回给了用户。
  • 该模型非常高效,可拓展性强,因为web server一直接受请求而不等待操作。
  • 在事件驱动模型中,会生成一个主要的循环来监听事件,当检测到事件时触发回调函数。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • Node.js有多个内置事件,可以通过引入events模块,并且通过实例化EventEmitter类来绑定和监听事件。
//引入events模块
var events = require('events');

//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();

//绑定事件处理程序
eventEmitter.on('eventName', eventHandler);

//触发事件
eventEmitter.emit('eventName');

下面是一个实现程序的实例

//引入events模块
var events = require('events');

//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();

//创建事件处理程序
var connectHandler = function connected(){
    console.log("连接成功!");
    //触发data_received事件
    eventEmitter.emit("data_received");
}

//绑定connection事件处理程序
eventEmitter.on('connection',connectHandler);

//使用匿名函数绑定data_received事件
eventEmitter.on('data_received',function(){
    console.log("数据接收成功!");
});

//触发connection事件
eventEmitter.emit('connection');
console.log("程序执行完毕");

连接成功!
数据接收成功!
程序执行完毕



网站公告

今日签到

点亮在社区的每一天
去签到