Node js 四种异步处理方法

//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");
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值