nodejs是单线程 ,优势是非阻塞io
- 同步异步区别
使用同步读取 一个读取完成等待下一个 —阻塞IO
使用异步读取 ----非阻塞IO
异步处理 数据
1.回调函数
http.createServer((req, res)=>{
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());
});
}
//在外边获取读取的数据 //result = data.toString()
getData((result) => {console.log(result);});
});
2.事件监听数据
引入事件驱动模块 let events = require('events');
创建事件驱动对象 let eventemit = new events.EventEmitter();
先发布订阅eventEmit.emit('mydata', data);
再监听数据eventEmit.on('mydata', (result) => {}
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
//发布订阅
eventEmit.emit('mydata', data);
});
//监听订阅
eventEmit.on('mydata', (result) => { //result = data
console.log(result.toString());
});
3.es6 处理
let promise = new Promise((resolve, reject) => {
fs.readFile('stu.txt', (err, data) => {
if (err) {throw err;}
resolve(data); //状态变为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);//状态变为resolve 返回data
});
});
return data;//函数返回data
}
catch (err) {throw err;}
}
getResult().then((result) => {
console.log("async", result.toString());
});