当前位置: 首页 > article >正文

ES8语法async与await

async和await两种语法结合可以让异步代码像同步代码一样。

一、async函数

  • async函数的返回值为Promise对象
  • promise对象的结果由async函数执行的返回值决定
async function fn() {
	// 返回一个字符串
	return '字符串'// 返回的结果不是一个Promise类型的对象,返回的结果就是成功的Promise对象。
	return;
	// 抛出错误,返回的结果是一个失败的Promise
	throw new Error('出错啦!');
	// 返回的结果如果是一个Promise对象
	return new Promise((resolve,reject)=>{
		// resolve('成功的数据');
		reject('失败的数据')});
}

const result = fn();
console.log(result);

// 调用then方法
result.then(value => {
	console.log(value);
}, reason => {
	console.warn(reason);
})

二、await

  • await必须写在async函数中
  • await右侧的表达式一般为Promise对象
  • await返回的是Promise成功的值
  • await的Promise失败了,就会抛出异常,需要通过try…catch捕获处理
// 创建promise对象
const p = new Promise((resolve, reject) => {
    // resolve("用户数据");
    reject("失败!!");
})
// await要放在async函数中
async function main() {
    try {
        let result = await p;
        console.log(result);
    } catch (error) {
        console.log(error);
    }
}

main();

三、async和await结合

// 1.引入js模块
const fs = require('fs');

// 读取“.md”文件
function weixue() {
    return new Promise((resolve, reject) => {
        fs.readFile('./resourse/为学.md', (err, data) => {
            // 如果失败
            if (err) reject(err);
            // 如果成功
            resolve(data);
        });
    });
}


function yougan() {
    return new Promise((resolve, reject) => {
        fs.readFile('./resourse/有感.md', (err, data) => {
            // 如果失败
            if (err) reject(err);
            // 如果成功
            resolve(data);
        });
    });
}
function guankan() {
    return new Promise((resolve, reject) => {
        fs.readFile('./resourse/观看.md', (err, data) => {
            // 如果失败
            if (err) reject(err);
            // 如果成功
            resolve(data);
        });
    });
}

// 2.声明一个async函数
async function main() {
    // 获取“.md”文件的内容
    // await返回的结果是成功的值
    let Weixue = await weixue();
    let Yougan = await yougan();
    let Guankan = await guankan();
    

    console.log(Weixue.toString());
    console.log(Yougan.toString());
    console.log(Guankan.toString());
    
}

main();

四、async与await结合封装ajax请求

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 发送AJAX请求,返回的结果是一个Promise对象
        function sendAJAX(url) {
            return new Promise((resolve, reject) => {
                // 1.创建对象
                const x = new XMLHttpRequest();
                // 2.初始化
                x.open('GET', url);
                // 3.发送
                x.send();
                // 4.事件绑定
                x.onreadystatechange = function () {
                    if (x.readyState === 4) {
                        if (x.status >= 200 && x.status < 300) {
                            // 成功
                            resolve(x.response);
                        }
                        else {
                            // 失败
                            reject(x.status);
                        }
                    }
                }
            })
        }

        // 测试1  then方法的使用
        // const result = sendAJAX('https://api.apiopen.top/getJoke').then(value => {
        //     console.log('成功', value);
        // }, reason => {
        //     console.log('失败', reason);
        // });

        // 测试2  async与await的使用  一般用axios请求
        async function main() {
            try {
                // 发送AJAX请求
                const result = await sendAJAX('https://api.apiopen.top/getJoke');
                const tianqi = await sendAJAX('https://v0.yiketianqi.com/life/yearavg');
                console.log('成功', result,'\n', tianqi);
            }
            catch (error) {
                console.log('失败', error);
            }
        }

        main();
    </script>

</body>

</html>

http://www.kler.cn/news/148201.html

相关文章:

  • xxljob学习笔记01(小滴课堂)
  • Kotlin中常见的List使用
  • Vue简单的表单操作
  • php.ini文件中XDebug的配置
  • python回溯求解电话号码组合
  • PHP 双门双向门禁控制板实时监控源码
  • mysql命令行连接数据库
  • 【数据结构】C : 追星
  • 进入docker容器
  • 【Web】PHP反序列化刷题记录
  • React入门使用 (官方文档向 Part1)
  • 体验一下压行的快乐~
  • python的itertools库
  • react的开发中关于图片的知识
  • [CLickhouse] 学习小计
  • 人工智能应用:文本分类的技术突破与实战指导
  • 学术科研常用工具
  • Flask 使用Jinja2模板引擎
  • 基于scrapy框架的腾讯招聘信息网络爬虫设计与实现
  • 「go module」一文总结 go mod 入门使用
  • 做外贸想赚客户的钱,先想想自己比别人强在哪
  • risc-v异常处理
  • MySQL实现高可用方案-MHA安装及配置
  • 构建 App 的方法
  • 浅谈硬件连通性测试几大优势
  • Android frameworks 开发总结之十(lock screen message Battery Last full charge)
  • 异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio
  • 【Java】实现一个自己的线程池
  • 基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度matlab程序
  • Slf4j使用Logback时,Logback如何初始化