讲解一下ES6 async关键字的使用方法

async 作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行。

async

语法

async function name([param[, param[, ... param]]]) { statements }
  1. name: 函数名称。
  2. param: 要传递给函数的参数的名称。
  3. statements: 函数体语句。

返回值

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。

async function helloAsync(){
   return "helloAsync";
 }
 
console.log(helloAsync())  // Promise {: "helloAsync"}

helloAsync().then(v=>{
  console.log(v);         // helloAsync
})

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。

await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。

function testAwait(){
  return new Promise((resolve) => {
      setTimeout(function(){
         console.log("testAwait");
         resolve();
      }, 1000);
  });
}

async function helloAsync(){
  await testAwait();
  console.log("helloAsync");
}
helloAsync();
// testAwait
// helloAsync

await

await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。

语法

[return_value] = await expression;

expression: 一个 Promise 对象或者任何要等待的值。

返回值

返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。

function testAwait (x) {
 return new Promise(resolve => {
   setTimeout(() => {
     resolve(x);
   }, 2000);
 });
}

async function helloAsync() {
 var x = await testAwait ("hello world");
 console.log(x);
}
helloAsync ();
// hello world

正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。

function testAwait(){
  console.log("testAwait");
}
async function helloAsync(){
  await testAwait();
  console.log("helloAsync");
}
helloAsync();
// testAwait
// helloAsync

await针对所跟不同表达式的处理方式:

Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。 非 Promise 对象:直接返回对应的值。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/8691.html

(0)
晴川运维晴川运维
上一篇 2025年6月12日
下一篇 2025年6月12日

相关推荐

  • 详解puppet

    puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应、配置、联动及报告,基于puppet ,可实现自动化重复任务、快速部署关键性应用…

    Linux系统 2025年6月14日
  • Linux下查看端口占用具体方法

    Linux如何查看端口占用?在Linux系统中查看端口占用可以使用lsof和netstat命令,下面为大家讲解一下Linux下查看端口占用具体方法。 1、lsof -i:端口号 用…

    Linux系统 2025年6月26日
  • Linux常用命令lndir命令具体使用方法

    Linux lndir命令用于连接目录内容。 执行lndir指令,可一口气把源目录底下的文件和子目录统统建立起相互对应的符号连接。 语法 lndir [-ignoreli…

    Linux系统 2025年6月8日
  • Linux终端中使用Nmcli命令连接WiFi具体方法

    nmcli命令是redhat7或者centos7之后的命令,该命令可以完成网卡上所有的配置工作,并且可以写入配置文件,永久生效,本篇文章重点为大家讲解一下在Linux终端中使用Nm…

    Linux系统 2025年6月13日
  • Mariadb中聚合函数和分组函数具体使用方法

    聚合函数能对集合中的一组数据进行计算,并返回单个计算结果,分组函数通过一定的规则将一个数据集划分为若干个小的区域,然后针对若干个小区域进行统计汇总,般用于对查询结果分组统计,常与聚…

    Linux系统 2025年6月13日
  • Fedora Linux 中使用 Homebrew 包管理器

    Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,…

    Linux系统 2025年7月4日
  • 使用WebFlux集成 Redis,Spring Boot 2

    Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻…

    Linux系统 2025年6月8日
  • HTML 元素使用实例

    HTML 文档是由 HTML 元素定义的。HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码,下面为大家详细讲解一下HTML 元素 HTML…

    Linux系统 2025年6月8日
  • Python中实现线程同步

    python中如何实现线程同步?所谓的线程同步机制其实就是锁的使用,下面为大家详细讲解一下python中实现线程同步具体方法。 使用 Thread 对象的 Lock 和 Rlock…

    Linux系统 2025年6月13日
  • Linux Tee 命令使用实例

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,那么可以用到tee…

    Linux系统 2025年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注