详解Node.js异步处理的各种写法

 更新时间:2019年06月09日 12:00:10   作者:mumingv  
这篇文章主要介绍了Node.js异步处理的各种写法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

异步的“坑”

最近一段时间参与开发了一个Node.js后台项目,作为一个PHP开发者,上手项目本身并不难,但是开发的过程却并不顺利,不顺利的主要原因在于思路上没有转变,没有从 同步 的思维转换到 异步 的思维。

所谓 同步 ,就是程序(线程)在一个任务的处理过程中,不会插入处理其他任务,即使遇到IO等不占CPU的操作,也会一直等待其结束才会继续往下处理。

所谓 异步 ,就是程序(线程)在一个任务的处理过程中,会插入处理其他任务,如遇到IO操作,当前任务会将程序(线程)的控制权释放给其他任务,等IO操作结果返回后再继续往下处理。

众所周知,Node.js采用的是单线程的异步模型,在具体代码的写法上自然和PHP等同步模型不一样。在具体项目开发的过程中,各种异步操作相关的关键字层出不穷,如: .then() 、 function* ... yield 、 async...await 等等。为了写一个 类同步 的操作,比如:“在执行完A步骤拿到结果之后再执行B步骤”这么一个简单的需求,却要经过大量的反复调试验证才能解决。究其原因,就是对于这些异步操作的场景和关键字的含义理解不到位,异步操作所提供的选择太多了。

下面就结合代码实例,理一理这些异步操作的参数具体怎么使用。

异步的各种写法

任务说明:项目根目录下有三个文件 Jay.txt 、 Angela.txt 、 Henry.txt ,依次读取这三个文件的内容并打印。

下面使用各种异步处理的方法来完成此任务。

回调函数

ps:下面看下Nodejs 处理异步(获取异步数据并处理)的方法

方法1. 回调函数方式

将异步方法如readFile封装到一个自定义函数中,通过将异步方法得到的结果传给自定义方法的回调函数参数。具体如下(以fs模块的readFile方法为例):

//封装
var func = function(filePath,callback){
  fs.readFile(filePath, function(err, data){
    if(err){
      return false;
    }
    callback(data);
  }) 
}
//调用
func('./a.txt', function(res){
  //处理异步方法返回得到的数据
  console.log(res);
})

 方法2. 事件驱动方式

使用node events模块,利用其EventEmitter对象广播和接收广播的方式传输异步方法返回的结果。具体如下(仍以fs模块的readFile异步方法为例):

var events = require('events');
var EventEmitter = new events.EventEmitter();
fs.readFile('./a.txt', function(err, data){
  //数据读取后发出readData信号的广播,并将数据data传出
  EventEmitter.emit('readData', data);
})
//监听readData信号,并对监听到的数据做处理(也可先定义监听,再做异步的读取操作)
EventEmitter.on('readData', function(res){
  //处理异步读取得到的数据
  console.log(res);
})

总结

以上所述是小编给大家介绍的Node.js异步处理的各种写法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

相关文章

  • Node.js程序中的本地文件操作用法小结

    Node.js程序中的本地文件操作用法小结

    这篇文章主要介绍了Node.js程序中的本地文件操作用法小结,作为运行在服务器端的JavaScript解释器,Node中自然拥有操作本地文件的方法,需要的朋友可以参考下
    2016-03-03
  • Windows下Node爬虫神器Puppeteer安装记

    Windows下Node爬虫神器Puppeteer安装记

    这篇文章主要介绍了Windows下Node爬虫神器Puppeteer安装记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 使用node.js半年来总结的 10 条经验

    使用node.js半年来总结的 10 条经验

    从3月初来到帝都某创业公司的服务器团队实习,到现在已接近半年的时间。PS: 已转正,服务器端用的 Node。
    2014-08-08
  • 基于node.js之调试器详解

    基于node.js之调试器详解

    下面小编就为大家带来一篇基于node.js之调试器详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • node.js中使用socket.io的方法

    node.js中使用socket.io的方法

    这篇文章主要介绍了node.js中使用socket.io的方法,需要的朋友可以参考下
    2014-12-12
  • Node.js console控制台简单用法分析

    Node.js console控制台简单用法分析

    这篇文章主要介绍了Node.js console控制台简单用法,结合实例形式分析了nodejs console控制台功能、常见函数与简单使用技巧,需要的朋友可以参考下
    2019-01-01
  • Node.js开启Https的实践详解

    Node.js开启Https的实践详解

    最近因为工作需要,需要将网站切换到了https。其实去年就想迁的迁移过去,但是资金紧缺就找了个免费的证书,实际效果不是很好。但是最近腾讯云推出了免费的ssl证书申请。楼主是亲测有效的。下面通过本文来一起看看Node.js开启Https的详细步骤吧,有需要的可以参考借鉴。
    2016-10-10
  • nodejs 提示‘xxx’ 不是内部或外部命令解决方法

    nodejs 提示‘xxx’ 不是内部或外部命令解决方法

    本文介绍了node.js包管理工具npm安装模块后,无法通过命令行执行命令,提示‘xxx’ 不是内部或外部命令的解决方法,给需要的小伙伴参考下。
    2014-11-11
  • node.js中的fs.writeFileSync方法使用说明

    node.js中的fs.writeFileSync方法使用说明

    这篇文章主要介绍了node.js中的fs.writeFileSync方法使用说明,本文介绍了fs.writeFileSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 浅谈Node.js 中间件模式

    浅谈Node.js 中间件模式

    中间件在 Node.js 中被广泛使用,它泛指一种特定的设计模式、一系列的处理单元、过滤器和处理程序,以函数的形式存在,这篇文章主要介绍了浅谈Node.js 中间件模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论