在 vue 中,使用 计算属性 设置 textarea
<textarea :value="myVal"></textarea>
...
computed:{
myVal: function(){
const rsp = await fetch('/url');
const txt = await rsp.text();
// 在这里打印出 aaa, 这是实际的值
console.log(txt);
// textarea 中的文字为 "[object promise]"
return txt;
},
},
...
1
ccccccc 2018-08-16 16:11:33 +08:00 via iPhone
async 才可以 await
|
2
wwjvtwoex OP 实际代码中是 async, 这里写错了
|
3
wwjvtwoex OP 再贴一遍实际的代码
computed:{ myVal: async function(){ const rsp = await fetch('/url'); const txt = await rsp.text(); // 在这里打印出 aaa, 这是实际的值 console.log(txt); // textarea 中的文字为 "[object promise]" return txt; }, }, |
4
feibinyang 2018-08-16 16:23:05 +08:00 1
调用 async/await 返回的是 Promise,await 之后的语句会被 Promise().then(....) then 之后执行
|
5
leafiy 2018-08-16 16:29:07 +08:00 1
computed 不能异步返回
https://github.com/foxbenjaminfox/vue-async-computed |
7
leafiy 2018-08-16 16:41:56 +08:00 1
@wwjvtwoex rsp = fetch (); txt = await rsp.text() ?
这里还不如直接用 fetch().then() |
8
mrcode 2018-09-23 00:42:58 +08:00
楼主的用法 vue 表示超纲了...
computed 本身是用于对 data 里的数据进行一些运算,以便在 render 函数可直接使用 而且,本身 render 函数直接调用 computed 里的函数拿的值,因此楼主这里拿到的是 Promise<any> 楼主不妨把这段代码放到 methods 里,把结果放到 data 里 |
9
q540374501 2019-04-04 15:00:02 +08:00
血泪教训,千万不要试图在 async 里封装什么东西让人调用,调用者必须以 async/await 的结构调用才能取到值。然而这完全违背了封装的原意,vue 在渲染时直接把 computed 调用了,返回一个 promise,全部完蛋。
|