等待和運算子優先順序
使用 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() 方法是非同步的。