async和await
async和await两种语法结合可以让异步代码像同步代码一样
async 函数
1.async函数的返回值为promise对象,
2.promise对象的结果由async函数执行的返回值决定。
注意:返回值的三种情况。
//async 函数
async function fn(){
//1. 返回的结果不是一个 Promise 类型的对象,返回的结果就是成功的 Promise 对象
//返回一个字符串
//return '孙悟空'
//2.抛出错误,返回的结果是一个失败的Promise
// throw new Error('出错了')
//3.返回的结果如果是一个Promise对象,则内层成功则外层成功,内层失败则外层失败
return new Promise((resolve,reject)=>{
resolve('成功的数据')
})
}
const result = fn()
// 调用 then方法
result.then(value=>{
console.log(value) //'成功的数据'
}, reason =>{
console.log(reason)
})
补充:promise有两个属性,
[[PromiseStatus]] // 表示状态,
[[PromiseResutl]] //表示状态对应的值
await表达式
1.await必须写在async函数中
2.await右侧的表达式一般为promise对象
3.await返回的是promise成功的值
4.await的promise失败了,就会抛出异常,需要通过try...catch捕获处理
注意:await与async 的关系就像小岳和燕子,燕子可以没有小岳,而小岳不能没有燕子
//创建 promise 对象
const p = new Promise((resolve,reject)=>{
// resolve("用户数据")
reject("失败啦!")
})
// await 要放在 async 函数中
// 语法: await promise实例对象;
// 作用: 获取await的promise实例对象中的[[PromiseResutl]] 的赋值;默认是undefind
async function main(){
//使用try捕获失败结果
try{
let result = await p;
//
console.log(result);
} catch(e){
console.log(e);
}
}
//调用函数
main();