async/await
ES7語法糖,基於Promise,處理異步任務更加方便
async
函數的返回值為promise對象,promise對象的結果由async函數執行的返回值決定
/*
async:
async不一定需要await,但是await一定需要async
加了async之后,函數的執行結果默認返回一個Promise對象
*/
async function f1() {
return 1
}
// console.log(f1())//Promise {<resolved>: 1}
//產生一個失敗的promise
async function f2() {
// throw 1;
return Promise.reject(2)
}
// console.log(f2()) //Promise {<rejected>: 1}
await
右側的表達式一般為promise對象,但也可以是其他的值
如果表達式是promise對象,那么返回的是promise成功的值
如果是其他的值,直接將此值作為await的返回值
如果await的promise失敗了,就會拋出異常,需要進行try catch處理,同時通過trycatch可以獲取失敗的promise的值
/*
await
await必須和async連用
await右側表達式為promise,得到的結果就是promise成功的value
await右側表達式不是promise,得到的結果就是值本身
await只能得到成功的結果,如果想要得到失敗的結果,只能用trycatch
*/
async function fn3() {
try {
return await Promise.reject(2);
} catch (error) {
console.log(error)//2
}
}
console.log(fn3())
/*
Promise {<pending>}
[[PromiseStatus]]: "rejected"
[[PromiseValue]]: 2
*/
await是串行的,如果想讓多個await並行,那么可以用promise.all進行操作,返回一個多個await結果的數組