node js 学习(2)回调函数 事件循环 buffer stream 模块系统

本文介绍了Node.js中的异步编程概念及其核心——回调函数,并通过对比阻塞与非阻塞代码示例展示了其优势。此外,还探讨了事件循环机制及如何利用事件与回调实现并发处理。最后,文章讲解了Node.js的模块系统,包括如何通过require引入模块并调用其提供的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

node js的回调函数 node js的异步编程的直接体现就是回调,异步编程依托于回调来进行实践 node js的所有API都支持回调

我们可以在一边读取文件的同时 一边来进行其他的命令 这样可以提高效率

阻塞代码示例

var fs = require("fs");
var data = fs.readFileSync("input.txt");
console.log(data.toString());
console.log("程序执行完毕");

飞阻塞代码 通过回调来实现

var fs = require("fs");
fs.readFile("input.txt",function (err,data) {
    if(err)
        return console.log(err);
    console.log(data.toString());
})
console.log("程序执行结束")

事件循环 node js是单进程单线程应用支持 但是通过事件和回调支持并发,

类似于观察者模式,事件相当于一个主题,而所有注册到这个事件上的处理函数相当于观察者

//引入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("程序执行完毕。");

emit表示触发事件on表示指定事件

首先触发connection事件 connection事件绑定了connectHandler函数 因此执行connectHandler函数 随后在函数中他又触发了data_received事件 data_received通过匿名函数形式绑定了函数 就是这样一个流程

node js所有的异步I/O 操作在完成时都会放一个事件到事件队列中 所有这些产生事件的对象都是event.EventEmitter的实例

js本身是只有字符串数据类型的 没有二进制数据类型 定义了一个buffer 该类用来创建一个数据的缓存区

写入缓存区 返回实际写入的大小

var buf = new Buffer(256);
var len = buf.write("www.baidu.com");
console.log(len);
从流中读取模块;相当于对于文件的操作 这里不展开


node js的模块系统  可以说 模块和文件是意义对应的 可以通过require来引入外面的模块随后 调用他的函数

node js提供了exports和require两个对象 exports是模块公开的接口 require 用于从外部获取一个模块的接口 即所获取模块的exports对象

hello.js中的文件内容如下

exports.helloWorld = function () {
    console.log("hello world");
}

index.js通过./hello 来获取hello.js的实例

var hello = require("./hello");
hello.helloWorld();
封装到对象中

function Hello() {
    var name;
    this.setName = function(thyName) {
        name = thyName;
    };
    this.sayHello = function() {
        console.log('Hello ' + name);
    };
    this.saHello = function () {
        console.log("Hi");
    }
};
module.exports = Hello;
进行调用 通过实例化进行调用

var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.saHello();






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值