//node.js里面的非阻塞IO 和阻塞IO
//异步处理
//事件驱动
//其他的后端语言会使用多线程进行多线程处理
//nodejs 是单线程,优势是非阻塞io 一个服务员同时满足多个客户的需求
//一个简单的例子
//多个文件读取
//异步处理
//1 使用回调函数处理
let http = require('http');
let fs = require('fs');
let events = require('events');//引入事件驱动模块
//创建事件驱动对象
let eventEmit = new events.EventEmitter();//new 完对象之后就可以使用emit(发布订阅)(后发布) on(监听订阅)(先监听)
http.createServer((req, res) => {
if (req.url == "/") {
res.writeHead(200, "Content-Type:text/html;charset=utf-8;");
//使用异步代码
//fs.readFileSync('stu.txt')//同步代码 阻塞io
//非阻塞
//使用回调函数处理异步
function getData(callback) {
fs.readFile('stu.txt', (err, data) => {
if (err) {
throw err;
}
callback(data.toString());
});
}
//在外边获取读取的数据
getData((result) => {
console.log(result);
});
// 2 使用node的事件驱动 来监听 events
//事件驱动的监听和vue里面 事件车 $emit $on 一个东西
fs.readFile('stu.txt', (err, data) => {
if (err) {
throw err;
}
//发布订阅
eventEmit.emit('mydata', data);
});
eventEmit.on('mydata', (result) => {
console.log(result.toString(), 1);
});
// 3 使用es6 处理
//promise
let promise = new Promise((resolve, reject) => {
fs.readFile('stu.txt', (err, data) => {
if (err) {
throw err;
}
resolve(data);
});
});
promise.then((result) => {
console.log("promise", result.toString());
});
//4 es7 async
async function getResult() {
try {
let data = await new Promise((resolve, reject) => {
fs.readFile('stu.txt', (err, data) => {
if (err) {
throw err;
}
resolve(data);
});
});
return data;
}
catch (e) {
throw e;
}
}
getResult().then((result) => {
console.log("async", result.toString());
});
res.end("hello");
}
}).listen(8000, '127.0.0.1', () => {
console.log("http://127.0.0.1:8000");
});
Node js 四种异步处理方法
最新推荐文章于 2024-06-02 09:50:51 发布