美文网首页
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 - 回调和事件驱动解决异步

    导读: 假定读者已了解同步与异步的区别,当你使用Node.js异步操作时,难免会出现拿到的值为undefined,...

  • 2了解Node.js事件模型

    Node.js应用程序在一个单线程的事件驱动模型中运行。 比较事件回调和线程模型 在传统的线程网络模型中,请求进入...

  • 《Node.js开发指南 ByVoid》异步和事件驱动

    参考《Node.js开发指南 ByVoid》 一、异步式 I/O 与事件驱动 1.Page4:Node.js 最大...

  • nodejs入门总结二:事件驱动

    三、nodejs事件驱动 Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过...

  • Node事件循环

    Node.js 事件循环机制 Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程、高并发的 Ja...

  • nodejs实战第一篇欢迎进入node.js的世界

    node.js是什么 node.js是一个javascript运行平台,显著的特征是异步和事件驱动,node和ja...

  • 关于node

    1 . Node.js 是单线程吗? 答 : Node.js 虽然是单线程模型,但是基于事件驱动、异步非阻塞模式,...

  • node 后端知识+HTTP

    Node.js的特点:1.单线程优点:节省内存,事件驱动机制 ,异步回调,劣势:不能做高并发开发,适合小型服务器架...

  • Node-事件模块,文件系统模块

    事件模块 在Node中: 大多数的Node.js核心API都是采用惯用的异步事件驱动架构(fs/http) 所有能...

  • Node文档笔记-events(事件)

    1、events(事件) 对于大多数的Node.js核心API采用的是异步事件驱动的架构,其中某些类型的对象(触发...

网友评论

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

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