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实现微信小程序实时聊天功能

    使用node.js实现微信小程序实时聊天功能

    在微信这个聊天工具里的小程序上实现聊天功能,总觉得很诧异,今天小编给大家带来了使用node.js实现微信小程序实时聊天功能,感兴趣的朋友一起看看吧
    2018-08-08
  • Node.js assert断言原理与用法分析

    Node.js assert断言原理与用法分析

    这篇文章主要介绍了Node.js assert断言原理与用法,结合实例形式分析了assert模块断言函数与使用技巧,需要的朋友可以参考下
    2019-01-01
  • 详解使用Typescript开发node.js项目(简单的环境配置)

    详解使用Typescript开发node.js项目(简单的环境配置)

    本篇文章主要介绍了详解使用Typescript开发node.js项目(简单的环境配置),非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • node版本升级npm命令警告原因及解决

    node版本升级npm命令警告原因及解决

    这篇文章主要为大家介绍了node版本升级npm命令警告原因解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 什么是MEAN?JavaScript编程中的MEAN是什么意思?

    什么是MEAN?JavaScript编程中的MEAN是什么意思?

    这篇文章主要介绍了什么是MEAN?JavaScript编程中的MEAN是什么意思?,跟lampp一样,MEAN是指现代web应用全栈开发工具一个组合,需要的朋友可以参考下
    2014-12-12
  • Node.js原生api搭建web服务器的方法步骤

    Node.js原生api搭建web服务器的方法步骤

    这篇文章主要介绍了Node.js原生api搭建web服务器的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • 通过NodeJS轻松使用GRPC和协议缓冲区的方法

    通过NodeJS轻松使用GRPC和协议缓冲区的方法

    本文介绍了GRPC和协议缓冲区的基本概念,并展示了如何在NodeJS应用程序中使用它们,GRPC是一个高性能RPC框架,协议缓冲区则用于定义服务和序列化消息,本文给大家介绍如何在NodeJS应用程序中使用GRPC和协议缓冲区,感兴趣的朋友一起看看吧
    2024-10-10
  • Node.js 使用流实现读写同步边读边写功能

    Node.js 使用流实现读写同步边读边写功能

    本文通过代码给大家介绍了Node.js 使用流实现读写同步边读边写功能,非常不错,具有参考借鉴价值,需要的额朋友参考下吧
    2017-09-09
  • async/await与promise(nodejs中的异步操作问题)

    async/await与promise(nodejs中的异步操作问题)

    这篇文章主要介绍了async/await与promise(nodejs中的异步操作问题),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Node.js中路径处理模块path详解

    Node.js中路径处理模块path详解

    相信大家都知道在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。因为部分文档说的不够清晰,还有部分因为接口的平台差异性。本文就给大家详细介绍下关于Node.js中的路径处理模块path,希望能对大家学习或者使用模块path有所帮助,下面来一起看看吧。
    2016-11-11

最新评论