等待和運算子優先順序
使用 await
關鍵字時,必須牢記運算子的優先順序。
想象一下,我們有一個非同步函式呼叫另一個非同步函式 getUnicorn()
,它返回一個 Promise,它解析為類 Unicorn
的一個例項。現在我們想要使用該類的 getSize()
方法獲得獨角獸的大小。
看下面的程式碼:
async function myAsyncFunction() {
await getUnicorn().getSize();
}
乍一看,它似乎有效,但事實並非如此。由於運算子優先順序,它等同於以下內容:
async function myAsyncFunction() {
await (getUnicorn().getSize());
}
這裡我們嘗試呼叫 Promise 物件的 getSize()
方法,這不是我們想要的。
相反,我們應該使用括號來表示我們首先要等待獨角獸,然後呼叫結果的 getSize()
方法:
async function asyncFunction() {
(await getUnicorn()).getSize();
}
當然。在某些情況下,以前的版本可能有效,例如,如果 getUnicorn()
函式是同步的,但 getSize()
方法是非同步的。