async/await语法总结

        console.dir(Promise);

        const p = new Promise((resolve, reject) => {
            reject("失败");
            resolve("成功!");
        })

        async function getA(){
            // await后是一个Promise,如果不是也会默认转为一个Promise
            // 如果Promise执行结果为resolve,则await返回resolve参数,await下面的代码都会执行,且async函数后的then中返回的是async函数return后的值
            // 如果Promise执行结果为reject,则await无返回值,await下面的代码不会执行,且async函数后的catch会捕获到reject中的值
            const a = await p;
            console.log(a);
            console.log("这里是a之后的代码");
            return 666;
        }

        getA().then((res)=>{
            console.log(res);
        }).catch((error)=>{
            console.log(error);
        });

1、async函数总是会返回一个promise

返回一个promise有三种情形:

1)async函数中显示的return一个promise;

2)如果return的是一个具体值,则会转换为一个resolve为该值的promise;

3)其它则会转换为一个resolve为undefined的promise。

2、await后面跟什么?

1)promise,此时如果promise执行结果为resolve,则await返回resolve中的值,如果promise执行结果为reject,则await无返回值;

2)具体值,此时await返回的就是该值。

3、错误处理:

当await后的promise返回的是reject时会报错,报错后不会继续往下执行,除非我们进行以下几种错误处理方式:

1)直接在await处进行错误处理,但await返回undefined,async函数再继续往下执行;

2)在async函数执行处添加错误处理,则碰到第一个await后的promise返回reject时会进行错误处理,但async函数不会继续往下执行;

3)将async中的Promise操作都放在try{}catch{}中。

4)另外一种方式:

          let ossRequestRes = await this.ossRequest(
            authReq,
            authBody,
            0,
            authBody.length
          )
            .then((ossRequestRes) => [null, ossRequestRes])
            .catch((err) => [err, null]);

          console.log("分片上传");
          console.log(ossRequestRes);

          if (!ossRequestRes[1]) {
            console.log(ossRequestRes[0].message);
            return false;
          }

          ossRequestRes = ossRequestRes[1];

异步使用实例:

        function ajax(url) {
            return new Promise((resolve, reject) => {
                $.ajax({
                    type: "GET",
                    url,
                    dataType: "json",
                    success(data){
                        resolve(data);
                    },
                    error(data){
                        reject(data);
                    }
                })
            })
        }

        async function getData() {
            const a = await ajax('/dist/static/json/base-info.json');
            console.log(a);
        }

        getData();

base-info.js:

{
    "xtfq": 0.25,
    "pzfq": 0.35,
    "rzfq": 0.45,
    "ysjfq": 0.55,
    "bffq": 0.65,
    "sjfq": 0.75
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值