async与await

2023-11-14

async / await 是ES7提出的基于Promise的解决异步的最终方案。

一、async

async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。

      async function sum() {
        console.log(1);
        return 2;
      }
      sum().then((res) => {
        console.log(res);
      });  //换行输出:1  2
      async function sum1() {
        console.log("promise");
        return new Promise(function (resolve, reject) {
          resolve("111");
        });
      }
      sum1().then((res) => {
        console.log(res);
      });  //换行输出:promise  111

二、await 

await 也是一个修饰符,只能放在async定义的函数内。

await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolvereject的参数),且取到值后语句才会往下执行;

如果不是Promise对象:把这个非promise的东西当做await表达式的结果。

     async function fun() {
        let a = await 111;
        let b = await new Promise((resolve, reject) => {
          setTimeout(function () {
            resolve("222");
          }, 3000);
        });
        let c = await (function () {
          return "333";
        })();
        console.log(a, b, c);
      }
      fun(); // 输出结果: 1 (3秒后输出) "222" "333"
  • 如果 Promise 有一个正常的返回值,await 语句也会返回它:  
      async function fun1() {
        let value = await new Promise(function (resolve, reject) {
          resolve("Return value");
        });
        console.log(value);
      }
      fun1(); //输出:Return value

三、async 基本错误处理 

async function add() {
     // console.log(x);//未定义变量
     throw new Error("fail");//手动抛出错误
}
add().catch((error) => {
        console.log(error);
      });

四、await 错误处理

处理异常的机制将用 try-catch 块实现。

     async function sum() {
        try {
          await new Promise(function (resolve, reject) {
            // throw new Error("error");
            throw "some error"; // 或者 reject("error")
            console.log("111"); //错误未处理不执行
          });
        } catch (err) {
          console.log(err);
        }
        console.log("错误已处理"); //错误已处理,执行
      }
      sum();

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

async与await 的相关文章

随机推荐

  • 【实例分割】4、YOLACT: Real-time Instance Segmentation

    文章目录 摘要 1 引言 2 相关工作 3 YOLACT 3 1 模板的产生 3 2 Mask 系数 3 3 Mask集成 3 4 其他情况 4 检测器 5 其他贡献 6 结果 6 1 实例分割结果 6 2 Mask质量 6 3 动态稳定性
  • SnakeGame(贪吃蛇游戏)

    目录 一 前言 二 项目介绍 1 游戏的操作方式 2 开发的过程中的注意事项 1 图像的左右问题 2 摄像头的画面尺寸问题 三 游戏的实现要点 1 选择第三方库 2 找到关键点并标记 3 创建一个类来保存关于游戏的所有功能 4 定义函数进行
  • spring & bean

    1 spring的三种实例化bean方法 2 配置spring管理bean的作用域 3 spring管理的bean的生命周期 bean什么时候进行实例化 spring容器启动的时候 还是在调用geatBean 方法的时候 延时初始化 指定b
  • chatgpt赋能python:Python创建5×5矩阵(Matrix)教程

    Python创建5 5矩阵 Matrix 教程 Python是一种广泛使用的高级编程语言 其具有简单易用 可读性强 支持多种编程范式等特点 已经成为数据分析 科学计算与机器学习等领域必备的编程工具之一 在Python的诸多应用场景中 创建矩
  • OpenCV4-图像二值化

    OpenCV4 图像二值化 图像二值化 1 环境配置 OpenCV版本 OpenCV4 1 2 图像二值化 二值图像 图像中的像素灰度值无论在什么数据类型中都只有最大值和最小值两种取值 这种 非黑即白 的图像称为二值图像 将非二值图像经过计
  • Java基础——函数与数组

    上一节中给大家留得习题都完成的怎么样呀 有什么问题就给阿Q留言吧 阿Q会知无不言 言无不尽的 今天让我们进一步学习一下java中的函数与数组吧 函数 也称之为方法 1 定义在类中 有特定功能的一段小程序 可以提高代码的复用性和维护性 2 函
  • 毕业项目SSM框架配置文件之SqlMapConfig.xml

  • Registry学习资料

    官网 https registry project readthedocs io en latest index html
  • npm安装、使用方法

    文章目录 npm安装 使用方法 1 npm介绍 2 npm查看版本 3 npm查看所有命令列表 4 npm查看所有命令用法 5 npm查看配置 6 npm永久换源 7 npm查看换源是否成功 8 npm创建模块 9 npm查看项目已安装的所
  • 【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别

    1 RequestBody和 ResponseBody RequestBody 通过 requestBody可以将请求体中的JSON字符串绑定到相应的bean上 当然 也可以将其分别绑定到对应的字符串上 实质上接受的是一个JSON的字符串
  • 基于Linux用C语言实现TCP/UDP图片和文件传输(socket)

    目录 一 TCP实现 1 服务端 2 客户端 二 UDP实现 1 服务端 2 客户端 一 TCP实现 传输控制协议 TCP Transmission Control Protocol 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设
  • Python-turtle库

    star py import turtle turtle pensize 5 turtle color red turtle penup turtle goto 150 150 turtle pendown turtle begin fil
  • Opencv之Unsharp Mask(USM)锐化

    1 介绍 USM技术是通过增强图像的高频部分的内容来提高视觉效果 用具体的公式表达即为 y n m x n m z n m 其中 x n m 为输入图像 y n m 为输出图像 而z n m 为校正信号 一般是通过对x进行高通滤波获取 是用
  • Shader入门指南

    Unity3D Shader入门指南 一 分类 Unity3d2014 04 28 17 40 16人阅读 评论 0 收藏 举报 unity3dShader3d渲染 目录 本文转载自 http onevcat com 2013 07 sha
  • 25岁竟要求产品经验10年?我一直以为是个段子,没想到居然是真的

    你是不是以为工作3年要求有10年工作经验是个段子 今天告诉你这是真事儿 25岁要求工作经验10年 你好歹给人家工作5年的机会吧 这样也好说剩下的5年工作经验靠加班 HR这样说我没法接啊 哈哈 按照对方逻辑来 毕竟25岁都没有 相关工作经验最
  • TCP拥塞控制原理

    一 拥塞控制的一般原理 1 产生拥塞的原因 在某段时间 若对网络中某一资源的需求超过了该资源所能提供的可用部分 网络的性能就会变坏 即对资源的需求 可用资源 注意拥塞控制与流量控制的区别 拥塞控制是防止过多的数据注入网络中 使得网络中路由器
  • CentOS7平台命令安装Anaconda3、配置Python3开发环境

    要在 CentOS 7 上安装 Anaconda3 您可以按照以下步骤进行操作 1 下载 Anaconda3 安装包 首先 访问 Anaconda 官方网站以获取最新版本的 Anaconda3 安装包的下载链接 可以使用 wget 命令来下
  • 【数据库原理及应用教程(第4版

    文章目录 一 选择题 二 填空题 三 简答题 Reference 一 选择题 1 2 3 4 5 6 7 8 9 10 B C B D A 1 在 SQL Server 中不是对象的是 A 用户 B 数据 C 表 D 数据类型 2 声明了变
  • studio和solo哪个好_beats studio3 和solo3的区别再哪里?

    首先两款机子在外观上就有很大的区别 前者是solo3 后者是studio3 仔细观察可以发现solo3的耳罩比较小 是圆形的 studio3的是椭圆形的 两款都是头戴式 外观设计 录音师是包耳的 SOLO是压耳的 体积的话 录音师大 SOL
  • async与await

    async await 是ES7提出的基于Promise的解决异步的最终方案 一 async async是一个加在函数前的修饰符 被async定义的函数会默认返回一个Promise对象resolve的值 因此对async函数可以直接then