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异步事件执行机制,各个事件的执行顺序带有不确定性。因此,对于需要对执行顺序有要求的事件就需要谨慎使用同步与异步事件。

相关文章

  • 初学者如何快速搭建Express开发系统步骤详解

    初学者如何快速搭建Express开发系统步骤详解

    这篇文章主要介绍了初学者如何快速搭建Express开发系统,结合实例形式详细分析了express框架搭建的具体步骤与相关注意事项,需要的朋友可以参考下
    2023-05-05
  • 使用NVM实现不同nodejs版本的自由切换

    使用NVM实现不同nodejs版本的自由切换

    在工作中,我们可能需要同时进行多个不同NodeJS版本的项目开发,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,NVM就是为解决这个问题而产生的,本文给出了下载、安装及使用方法,需要的朋友可以参考下
    2024-02-02
  • nodejs中模块定义实例详解

    nodejs中模块定义实例详解

    这篇文章主要介绍了nodejs中模块定义方法,结合实例形式分析了nodejs模块的原理、常见模块及相应的定义方法,需要的朋友可以参考下
    2017-03-03
  • nvm查看所有node包命令失效原因解决方案

    nvm查看所有node包命令失效原因解决方案

    使用nvm时可能会遇到超时问题,这是由于node的包存放在国外服务器上,解决方法是在nvm的配置文件中添加镜像地址,下面就来具体介绍一下步骤,感兴趣的可以了解一下
    2024-09-09
  • node.js入门教程

    node.js入门教程

    这篇文章主要介绍了node.js入门教程,讲解了node.js在linux和windows下的安装,模块的概念,NPM的使用等等,是一篇不错的nodejs入门文章,需要的朋友可以参考下
    2014-06-06
  • Node.js实战之Buffer和Stream模块系统深入剖析详解

    Node.js实战之Buffer和Stream模块系统深入剖析详解

    这篇文章主要介绍了Node.js实战之Buffer和Stream模块系统深入剖析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 解决修复npm安装全局模块权限的问题

    解决修复npm安装全局模块权限的问题

    今天小编就为大家分享一篇解决修复npm安装全局模块权限的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • node静态服务器实现静态读取文件或文件夹

    node静态服务器实现静态读取文件或文件夹

    这篇文章主要介绍了node静态服务器实现静态读取文件或文件夹,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用koa2创建web项目的方法步骤

    使用koa2创建web项目的方法步骤

    这篇文章主要介绍了使用koa2创建web项目的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • nodejs微信开发之授权登录+获取用户信息

    nodejs微信开发之授权登录+获取用户信息

    这篇文章主要介绍了nodejs微信开发之授权登录+获取用户信息,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03

最新评论