ES6知識點整理之----async----語法
阿新 • • 發佈:2018-09-20
整理 pro 指定 bsp fun clas 參數 function resolve 的 Promise 對象。
1、async
函數返回一個 Promise 對象。
2、async
函數內部return
語句返回的值,會成為then
方法回調函數的參數。
async function f() { return ‘hello world‘; } f().then(v => console.log(v)) // "hello world"
3、async
函數內部拋出錯誤,會導致返回的 Promise 對象變為reject
狀態。拋出的錯誤對象會被catch
方法回調函數接收到。
4、只有async
函數內部的異步操作全部執行完,才會執行then
方法指定的回調函數。
5、await
命令後面是一個 Promise 對象。如果不是,會被轉成一個立即resolve
async function f() { return await 123; } f().then(v => console.log(v)) // 123
await
命令後面的 Promise 對象如果變為reject
狀態,則reject
的參數會被catch
方法的回調函數接收到。
6、只要一個await
語句後面的 Promise 變為reject
,那麽整個async
函數都會中斷執行。
- 如果希望不要中斷,可以將await放在try...catch結構裏面。
- 另一種方法是
await
後面的 Promise 對象再跟一個catch
方法,處理前面可能出現的錯誤。
7、使用註意點:
- 最好把
await
命令放在try...catch
代碼塊中 - 多個
await
命令後面的異步操作,如果不存在繼發關系,最好讓它們同時觸發 await
命令只能用在async
函數之中,如果用在普通函數,就會報錯。- 如果希望多個請求並發執行,可以使用
Promise.all
方法。 - 目前,
esm
模塊加載器支持頂層await
,即await
命令可以不放在 async 函數裏面,直接使用。必須使用esm
加載器,才會生效。
ES6知識點整理之----async----語法