IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> async+await:发送Ajax请求 -> 正文阅读

[JavaScript知识库]async+await:发送Ajax请求

async函数

????async关键字用于修饰函数,async函数的返回值为Promise对象,这个promise对象的结果,由async函数执行的返回值决定。
????????(1)async函数的返回值为普通类型,那么对应的Promise对象的状态为成功。

<script>
    async function main() {
        return "Hello,Async!";
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述
????????(2)async函数的返回值为Promise对象,那么返回的Promise对象的状态由这个返回值决定。

<script>
    async function main() {
        return new Promise((resolve, reject) => {
            resolve("Hello,Async!");
        });
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述
????????(3)async函数通过throw语句抛出异常,那么返回的Promise对象的状态恒定为失败。

<script>
    async function main() {
        throw "ERROR";
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述

await表达式

????await关键字用于修饰一个表达式,该表达式被称为:“await表达式”。
????await表达式的右侧语句一般对应一个Promise对象,但是并不是固定的,也可以是其它类型的值。
????await表达式返回的一般都是值,而非promise对象。
????????(1)若await关键字右侧为Promise对象,那么await表达式返回的就是Promise成功的值;

<script>
    async function main() {
        let promise = new Promise((resolve, reject) => {
            resolve("Hello,Async!");
        });
        let result = await promise;
        console.log(result)
        return result;//返回值
        // throw "ERROR";
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述
????????(2)若await关键字右侧是其它值,那么会直接将此值作为await的返回值。

<script>
    async function main() {
        let promise = "Hello,Async!"
            /*new Promise((resolve, reject) => {
                        resolve("Hello,Async!");
                    });*/
        let result = await promise;
        console.log(result)
        return result;
        // throw "ERROR";
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述

????????(3)此外,await表达式必须写在async函数中,否则会报错;如果await关键字右侧promise对象是失败的,那么可以使用try…catch…语句块中进行捕获处理。
在这里插入图片描述

<script>
    async function main() {
        let promise = new Promise((resolve, reject) => {
            reject("Hello,Async!");
        });
        //异常捕获
        try {
            let result = await promise;
            return result;
        } catch (err) {
            console.log(err)
            return undefined;
        }
    }

    let data = main();
    console.log(data)
</script>

在这里插入图片描述

async+await:发送Ajax请求,解析数据

????后端接口URL:http://localhost:8011/pg_demo/distract/GET/distract,返回数据内容截图如下,
在这里插入图片描述????下面,使用async和await表达式,向后端发送Ajax数据请求,获取接口数据(其中跨域问题已经在后端配置,可参考:《SpringBoot-跨域访问3种配置方式》),示例代码如下,
在这里插入图片描述

<!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>Document</title>
</head>

<body>
    <button id="btn">点击按钮</button>
</body>
<script>
    function sendAjax(_url) {
        return new Promise((resolve, reject) => {
            //1-创建Ajax对象
            let xhr = new XMLHttpRequest();
            //2-设置请求方法+路径
            xhr.open("GET", _url);
            // 3-发送请求
            xhr.send();
            //4-处理返回结果
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    //判断状态码
                    if (xhr.status >= 200 && xhr.status < 300) {
                        //转换promise对象状态为成功
                        resolve(xhr.response);
                    } else {
                        //转换promise对象状态为失败
                        reject(xhr.status);
                    }
                }
            }
        });
    }

    let button = document.querySelector("#btn");
    //由于await关键字只能用于async函数-因此点击事件的回调函数需要使用async关键字进行修饰
    button.addEventListener("click", async function() {
        //获取接口返回数据
        let result = await sendAjax("http://localhost:8011/pg_demo/distract/GET/distract");
        //解析结果
        console.log(JSON.parse(result));
    })
</script>

</html>

????点击按钮之后,控制台打印的返回数据内容如下,
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:43:07  更:2022-07-20 18:43:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:45:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码