nodejs 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高
nodejs的每一个api都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发
我们经常使用的File的readFile事件就是一个并发事件。
console.log("1");
fs.readFile("mime.json",function (err,data) {
console.log(data);
console.log('2');
});
console.log("3");
代码的执行顺序是1-3-2;但是我们很多时候会需要1-2-3的方式去执行方法,这个时候我们可以通过以下三种方式去解决这个问题;
1、将readFile改成同步方法。即readFile-->readFileSync
const fsSync = fs.readFileSync('./mime.json');
const mimeObj = JSON.parse(fsSync.toString());
2、通过回调的方式解决
console.log("1");
function getMime(callback){
fs.readFile("mime.json",function (err,data) {
// console.log(data.toString());
callback(data.toString()) ;
console.log("2");
});
}
getMime(function (result) {
console.log(result);
console.log("3");
});
3、nodejs 有多个内置的事件,我们可以通过引入events模块,并通过实例化eventEmitter类来绑定和监听事件,通过事件驱动的方式解决异步的问题
也可以说成是广播或者订阅
广播和接收广播 ---- 订阅和通知
具体使用如下
const events = require("events");
const eventEmitter = new events.EventEmitter();
//监听广播
eventEmitter.on('to_parent',function () {
//接受到了广播事件
console.log("接受到了广播事件")
});
setTimeout(function () {
console.log("开始广播");
eventEmitter.emit("to_parent","发送数据");
},2000);
在readFIle中这样使用
console.log("1");
function getMime(){
fs.readFile("mime.json",function (err,data) {
eventEmitter.emit("to_parent",data);
console.log("2");
});
}
getMime();
eventEmitter.on('to_parent',function (data) {
//接受到了广播事件
console.log("接受到了广播事件")
console.log("3");
});
4、使用Promise方式---略
网友评论