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
}