async和awit

本文介绍了如何利用async函数和await表达式将异步代码写得更加简洁。通过示例展示了如何用async/await读取多个文件内容,并通过封装的sendAjax函数发送AJAX请求。示例中,每个文件读取和AJAX请求都被转换为Promise,然后在async函数中使用await等待它们完成,确保了代码的同步执行风格。同时,还展示了如何处理await表达式可能抛出的异常。
摘要由CSDN通过智能技术生成

1、async和awit两种方法结合可以让异步代码像同步代码一样

2async函数

1)async函数的返回值为promise对象

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

2await表达式

1)必须写在async函数中

  • await 必须写在 async 函数中, 但 async 函数中可以没有 await
  • 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 来捕获处理
  • await 返回的是promise成功的值
  • await右侧的表达式一般为pomise
  • 结合async和await 读取文件内容---- 读取多个文件
  • //1. 引入 fs 模块
    const fs = require("fs");
     
    //读取『为学』
    function readWeiXue() {
        return new Promise((resolve, reject) => {
            fs.readFile("./resources/为学.md", (err, data) => {
                //如果失败
                if (err) reject(err);
                //如果成功
                resolve(data);
            })
        })
    }
     
    function readChaYangShi() {
        return new Promise((resolve, reject) => {
            fs.readFile("./resources/插秧诗.md", (err, data) => {
                //如果失败
                if (err) reject(err);
                //如果成功
                resolve(data);
            })
        })
    }
     
    function readGuanShu() {
        return new Promise((resolve, reject) => {
            fs.readFile("./resources/观书有感.md", (err, data) => {
                //如果失败
                if (err) reject(err);
                //如果成功
                resolve(data);
            })
        })
    }
     
    //声明一个 async 函数
    async function main(){
        //获取为学内容
        let weixue = await readWeiXue();
        //获取插秧诗内容
        let chayang = await readChaYangShi();
        // 获取观书有感
        let guanshu = await readGuanShu();
     
        console.log(weixue.toString());
        console.log(chayang.toString());
        console.log(guanshu.toString());
    }
     
    main();

  • 封装ajax ----promise
  •      // 发送 AJAX 请求, 返回的结果是 Promise 对象
            function sendAjax(url) {
                return new Promise((resolve, reject) => {
                    //1. 创建对象
                    const x = new XMLHttpRequest();
                    //2. 初始化
                    x.open('POST', 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);
                            }
                        }
                    }
                })
            }
        
     
            //promise then 方法测试
     
            // sendAJAX("接口名").then(value=>{
            //     console.log(value);
            // }, reason=>{})
      
     
     
            // async与await 测试axios
            
            async function main(){
                //发送 AJAX 请求
                let result = await sendAJAX("接口名");
     
                console.log(result);
            }
     
            main();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值