美文网首页
Node.js - 回调和事件驱动解决异步

Node.js - 回调和事件驱动解决异步

作者: 饮杯梦回酒 | 来源:发表于2019-03-15 15:26 被阅读0次

    导读:

    • 假定读者已了解同步与异步的区别,当你使用Node.js异步操作时,难免会出现拿到的值为undefined,这个时候常用的解决方法就是回调函数 / 事件驱动来使其达到同步的目的。

    例子:

    • 原始一般操作:
    const fs = require('fs')
    
    function getMime() {
        fs.readFile('mime.json',function(err,data) {
            // console.log(data.toString());
            return data.toString();
        })
    }
    
    console.log(getMime());  // undefined     原因:当执行到readFile()时,由于是异步读取文件,故该函数执行完成,首先返回了undefined
    
    • 回调函数:
    const fs = require('fs')
    
    function getMime(callback) {
        fs.readFile('mime.json',function(err,data) {
            // console.log(data.toString());
            // return data;
            callback(data)
        })
    }
    
    getMime((result) => {
        console.log(result.toString());  // 获取到值
    })
    
    • 事件驱动:
    const events = require('events')
    const fs = require('fs')
    
    let EventEmitter = new events.EventEmitter()
    
    // 广播和 接收广播
    // 监听 to_parent的广播
    
    /*EventEmitter.on('to_parent', (data) => {
        // 监听到广播后才执行回调
        console.log(`接收到了这个广播事件的数据:${data}`)   // 2.接收到了这个广播事件的数据:send
    })
    
    setTimeout(() => {
        console.log('开始广播...')    // 1.开始广播
        // 广播to_parent事件
        EventEmitter.emit('to_parent', 'send')
    },100)*/
    
    
    function getMime(callback) {
        fs.readFile('mime.json',function(err,data) {
            EventEmitter.emit('data', data)     // 异步处理到这里就广播data事件
        })
    }
    
    getMime()
    
    EventEmitter.on('data', (data) => {
        console.log(data.toString())
    })   // 接收广播拿到传来的数据
    

    总结:

    • 很经典的问题,经常会遇到,注意掌握。

    相关文章

      网友评论

          本文标题:Node.js - 回调和事件驱动解决异步

          本文链接:https://www.haomeiwen.com/subject/bsslmqtx.html