async和await

news/2024/11/8 20:01:27/

async

介绍

函数的返回值为promise对象

promise对象的结果由async函数执行的返回值决定

async 函数返回的是一个 Promise 对象。从文档中也可以得到这个信息。async 函数(包含函数语句、函数表达式、Lambda表达式)会返回一个 Promise 对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。

Promise.resolve(x) 可以看作是 new Promise(resolve => resolve(x)) 的简写,可以用于快速封装字面量对象或其他对象,将其封装成 Promise 实例。

async 函数返回的是一个 Promise 对象,所以在最外层不能用 await 获取其返回值的情况下,我们当然应该用原来的方式:then() 链来处理这个 Promise 对象

举例

返回非promise对象时

 返回一个成功的promise对象时

 返回一个失败的promise对象时

 抛出异常时

await表达式

介绍

await右侧的表达式一般为promise对象 但也可以是其他的值

如果表达式是promise对象 await返回的是promise的值

如果表达式是其他值 直接将此值作为await的返回值

注意

await必须写在async函数中 但async函数中可以没有await

如果await的promise失败了 就会抛出异常 需要通过try...catch进行异常捕获

举例

右侧是成功的promise时 

await直接返回promise成功的值 

右侧是失败的promsie时,我们这里需要使用try...catch捕捉异常

await返回的就是捕获到的失败的promise值

右侧是非promise类型的值时

await直接返回原来的数据

 async结合await发送ajax请求

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Promise封装ajax请求方式</title>
</head><body><div><button onclick="fangfa()">点击发送请求</button></div>
</body>
<script>async function fangfa() {let result = await sendAjax();console.log('asynic发送')console.log(result)}function sendAjax() {// console.log('传统方式')//     //传统方式// const xhr = new XMLHttpRequest()// //2 初始化// xhr.open('GET', "https://api.oioweb.cn/api/common/rubbish?name=香蕉")// //3 发送// xhr.send()// //4 绑定事件 处理响应结果// xhr.onreadystatechange = () => {//     //判断//     if (xhr.readyState === 4) {//         //判断响应状态码是否在 200-299的区间内//         if (xhr.status >= 200 && xhr.status < 300) {//             //如果成功//             // console.log(xhr.response)//             console.log(xhr.response)//         } else {//             //如果失败//             // console.error(xhr.status)//             console.log(xhr.status)//         }//     }// }//promise方式// 1 创建对象const p = new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()//2 初始化xhr.open('GET', "https://api.oioweb.cn/api/common/rubbish?name=香蕉")//3 发送xhr.send()//4 绑定事件 处理响应结果xhr.onreadystatechange = () => {//判断if (xhr.readyState === 4) {//判断响应状态码是否在 200-299的区间内if (xhr.status >= 200 && xhr.status < 300) {//如果成功// console.log(xhr.response)resolve(xhr.response)} else {//如果失败// console.error(xhr.status)reject(xhr.status)}}}})// let res = null;p.then(value => {return value;}, (reason) => {console.error(reason)})return p;}
</script></html>


http://www.ppmy.cn/news/66722.html

相关文章

一起来!白嫖Amazon DynamoDB!!!

Amazon DynamoDB简介 Amazon DynamoDB是由Amazon Web Services&#xff08;AWS&#xff09;提供的一种快速、灵活、全托管的NoSQL数据库服务&#xff0c;支持文档和键/值数据模型。它具有自动扩展、低延迟、高可靠性、高吞吐量等特点&#xff0c;能够处理从几个字节到几TB的数…

闪耀的钥匙:PHP 与访问修饰符

文章目录 参考描述访问修饰符访问修饰符PHP 与访问修饰符publicprotectedprivate 继承中的重写规则可见性举个栗子未重写父类的受保护成员前将受保护成员重写为公有成员将受保护成员重写为私有成员 为什么不允许子类成员设置比父类成员更严格的访问限制&#xff1f; final 关键…

【译】Java 内存泄露的构造和检测

1. 概述 在 Java 应用程序中&#xff0c;内存泄漏会导致严重的性能下降和系统故障。开发人员必须了解内存泄漏的发生原因以及如何识别和解决它们。 在本教程中&#xff0c;我们将提供一个使用失效的监听器问题作为示例来创建 Java 内存泄漏的指南。我们还将讨论各种检测内存泄…

简单随机微分方程数值解

1.随机微分方程求解&#xff1a;dX(t) − αXtdt σdWt 法一&#xff1a;Euler-Maruyama %% %O-U过程 %dX(t)-alpha*Xt*dtsigma*dWt,X|t0X0 %alpha2,sigma1,X01 % 设置初始参数 T 1; % 时间区间长度 N 1000; % 离散化的时间步数 dt T/N; …

linux device tree 中断属性

/* * 设备树的中断属性 */ interrupt-controller /* 中断控制器 */ #interrupt-cells /* 表明引用这个中断控制器的话需要多少个 cell */ #interrupt-cells<1> /* 其它节点要使用这个中断控制器时&#xff0c;只需要一个 cell 来表明使用&quo…

【C语言】扫雷游戏

这里写目录标题 前言1.初始化棋盘2.展示棋盘3.布置雷4.开始扫雷4.1判断输赢4.2扫雷时连续性展开4.3展示玩法 5.整体代码展示5.1 game.h头文件展示5.2 game.c源文件展示5.3 text.c源文件展示 所属专栏&#xff1a;C语言 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyan…

Java14-常用类:字符串,日期类,比较器

一&#xff1a;字符串&#xff1a;String 1.概述&#xff1a; String&#xff1a;字符串&#xff0c;使用一对""引起来表示。 1.String 声明 为final的&#xff0c;不可被继承 2.String 实现了Serializable接口&#xff1a;表示字符串是支持序列化的。 实现了Co…

Linux系统结构

UNIX/Linux 系统可以粗糙地抽象为 3 个层次&#xff0c;底层是系统内核&#xff08;Kernel&#xff09;&#xff1b;中间层是Shell层&#xff0c;即命令解释层&#xff1b;高层则是应用层。 &#xff08;1&#xff09;内核层 内核层是 UNIX/Linux 系统的核心和基础&#xff0c…