等待和运算符优先级
使用 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()
方法是异步的。