[JavaScript]使用async函数需要注意的一个问题
async 函数适合执行一些流程,不要试图使用 async 函数返回一些东西。有一个错误的例子就是在Vue的模板中绑定一个计算属性,这个计算属性里面使用 async 函数获取数据。示例代码如下:
HTML模板部分:
<div>{{computedValue}}</div>
JavaScript部分:
//......
computed: {
async computedValue(){
let val = await aAsyncMethod();
return val;
}
}
如果你这么做了,你永远只会得到如下字符串:
'[object Promise]'
为什么?
原因很简单,就像 MDN 上这篇文档 MDN - async函数 介绍的,async 遇到await
的时候会立即返回一个Promise
,把控制权交出,直到 await 后面的异步操作有结果(resolve
或者reject
)才会继续执行后面的代码。可以说,async 函数的返回值永远是一个Promise
。
END