node异步使用await和不用await的区别实例分析

 更新时间:2023年06月08日 09:54:10   作者:foreverling_ling  
这篇文章主要介绍了node异步使用await和不用await的区别,结合实例形式分析了node.js异步使用await和不用await的实例中,同步与异步执行的区别,需要的朋友可以参考下

最近在用node写项目。新版node异步用的是async/await这两个关键字。我们都知道,一般这两个关键字要成对出现。但是,笔者发现,如果不需要等待返回值的话,await可以不加。那么await加和不加有什么区别呢?百度以及google了大量资料,结合评论,最终在实践中弄明白了。下面直接上例子。

不加await

async test(ctx,next){
    this.doThing().then(console.log('done Thing'))
    this.doAnotherThing();
    console.log('this way');
  }
  async doThing() {
    this.doA();
    this.doB();
  }
  doAnotherThing() {
    console.log('do another thing')
  }
  async doA() {
    return new Promise(resove => {
      setTimeout(() => {
        console.log('done A')
        resove()
      }, 1000)
    })
  }
  async doB() {
    return new Promise(resove => {
      setTimeout(() => {
        console.log('done B')
        resove()
      }, 100)
    })
  }

运行test函数以后,命令行迅速依次打印了如下结果

我们看到,没有加await,异步函数A,B顺序执行,由于A运行时间较长,所以B先执行完成,整个过程没有阻塞。

加await

async test(ctx,next){
    this.doThing().then(console.log('done Thing'))
    this.doAnotherThing();
    console.log('this way');
  }
  async doThing() {
    await this.doA()
    await this.doB()
  }
  doAnotherThing() {
    console.log('do another thing')
  }
  async doA() {
    return new Promise(resove => {
      setTimeout(() => {
        console.log('done A')
        resove()
      }, 1000)
    })
  }
  async doB() {
    return new Promise(resove => {
      setTimeout(() => {
        console.log('done B')
        resove()
      }, 100)
    })
  }

运行结果如下 :

由于加了await,所以要等待异步事件A先完成,然后才会进行事件B。也就是await不会阻塞同步事件的运行,但是异步却是一个一个执行的,其中一个阻塞,下一个异步事件就无法继续。

由于node.js异步事件执行机制,各个事件的执行顺序带有不确定性。因此,对于需要对执行顺序有要求的事件就需要谨慎使用同步与异步事件。

相关文章

  • 在Node.js中使用Express实现视频评论的列表展示和删除功能

    在Node.js中使用Express实现视频评论的列表展示和删除功能

    在现代Web应用中,视频内容和互动功能(如评论)的结合极大地增加了用户的参与度,本文将通过一个具体的例子,展示如何在Node.js环境中使用Express框架来实现视频评论的列表展示和删除功能,需要的朋友可以参考下
    2024-04-04
  • 前端pnpm workspace架构实例详解

    前端pnpm workspace架构实例详解

    pnpm作为新一代包管理工具,解决了npm和yarn在依赖管理中的效率问题,它采用独特的网状+平铺结构,显著提升安装速度并优化磁盘空间,这篇文章主要介绍了前端pnpm workspace架构的相关资料,需要的朋友可以参考下
    2026-02-02
  • nodejs 实现钉钉ISV接入的加密解密方法

    nodejs 实现钉钉ISV接入的加密解密方法

    这篇文章主要介绍了nodejs 实现钉钉ISV接入的加密解密方法,非常不错,具有参考借鉴价值,需要的的朋友参考下吧,需要的朋友可以参考下
    2017-01-01
  • 卸载安装Node.js与npm过程详解

    卸载安装Node.js与npm过程详解

    这篇文章是根据自己的经验及实际操作介绍nodejs和npm的卸载及安装,相信对很多人会有帮助,有需要的可以参考学习。
    2016-08-08
  • 手写Node静态资源服务器的实现方法

    手写Node静态资源服务器的实现方法

    这篇文章主要介绍了手写Node静态资源服务器的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Nodejs 构建Cluster集群多线程Worker threads

    Nodejs 构建Cluster集群多线程Worker threads

    这篇文章主要为大家介绍了Nodejs 构建Cluster集群多线程Worker threads示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • nodejs express实现中间件

    nodejs express实现中间件

    这篇文章主要为大家介绍了nodejs express实现中间件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • node中Stream流的详细介绍

    node中Stream流的详细介绍

    这篇文章主要介绍了node中Stream的详细介绍,流是一个数据传输手段,是端到端信息交换的一种方式,而且是有顺序的,是逐块读取数据、处理内容,用于顺序读取输入或写入输出
    2022-09-09
  • 详解利用 Express 托管静态文件的方法

    详解利用 Express 托管静态文件的方法

    本篇文章主要介绍了详解利用 Express 托管静态文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 用node和express连接mysql实现登录注册的实现代码

    用node和express连接mysql实现登录注册的实现代码

    本篇文章主要介绍了用node和express连接mysql实现登录注册的实现代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07

最新评论