解决nodejs异步问题

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方式---略

猜你喜欢

转载自blog.csdn.net/weixin_33859504/article/details/87508408