问题导向
async await是什么? 如何使用?promise如何处理错误?宏任务和微任务?
如果你都有了答案,可以忽略本文章,或去JS学习地图寻找更多答案
async await
是什么?
generator和promise的语法糖
async = new Promise
await = then函数的语法糖
try-catch = catch
注意:
1.await必须写在aysnc函数中,但async函数中可以没有await
2.必须使用try catch 才能捕获失败的结果
async函数
async函数的返回值是一个promise对象,结果的状态根据函数返回的状态决定
async函数中:
1,返回的普通值/对象会封装成promise对象
2,await后可追加普通值,函数,async函数
3,await后如果是值,会封装成promise对象
4,await后如果是rejected态,会报错
5,await的下面,才是回调的异步代码,await和之前不是
//await 后是 promise对象
!(async () => {
const p = Promise.resolve(300) //返回promise对象
const data = await p //await 相当于then
console.log(data) //300
})()
//await 后是 普通值
!(async () => {
const p = Promise.resolve(300)
const data = await 400 //await Promise.resolve(400),相当于封装了
console.log(data) //400
})()
//await 后是 async函数
async function fn(){
retrun Promise.resolve(200)
}
!(async () => {
const p = Promise.resolve(300)
const data = await fn() //await Promise.resolve(200),相当于封装了
console.log(data) //200
})()
//try.catch
async function fn() {
return Promise.reject('error')
}
!(async () => {
try {
const p = Promise.resolve(300)
const data = await fn() //返回rejected态
console.log(data)
} catch (e) {
console.log(e) //error
}
})()
//async 的回调
async function foo(){
consolo.log(2)
await bar()
console.log(5)