V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wwjvtwoex
V2EX  ›  Vue.js

为什么 vue 中, await 不能取得正确的值 ?

  •  
  •   wwjvtwoex · Aug 16, 2018 · 5383 views
    This topic created in 2820 days ago, the information mentioned may be changed or developed.

    在 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;
    	},
    },
    

    ...

    9 replies    2019-04-04 15:00:02 +08:00
    ccccccc
        1
    ccccccc  
       Aug 16, 2018 via iPhone
    async 才可以 await
    wwjvtwoex
        2
    wwjvtwoex  
    OP
       Aug 16, 2018
    实际代码中是 async, 这里写错了
    wwjvtwoex
        3
    wwjvtwoex  
    OP
       Aug 16, 2018
    再贴一遍实际的代码


    computed:{
    myVal: async function(){
    const rsp = await fetch('/url');
    const txt = await rsp.text();

    // 在这里打印出 aaa, 这是实际的值
    console.log(txt);

    // textarea 中的文字为 "[object promise]"
    return txt;
    },
    },
    feibinyang
        4
    feibinyang  
       Aug 16, 2018   ❤️ 1
    调用 async/await 返回的是 Promise,await 之后的语句会被 Promise().then(....) then 之后执行
    leafiy
        5
    leafiy  
       Aug 16, 2018   ❤️ 1
    wwjvtwoex
        6
    wwjvtwoex  
    OP
       Aug 16, 2018
    @leafiy #5,我使用 异步 method 得到同样结果
    leafiy
        7
    leafiy  
       Aug 16, 2018   ❤️ 1
    @wwjvtwoex rsp = fetch (); txt = await rsp.text() ?
    这里还不如直接用 fetch().then()
    mrcode
        8
    mrcode  
       Sep 23, 2018
    楼主的用法 vue 表示超纲了...

    computed 本身是用于对 data 里的数据进行一些运算,以便在 render 函数可直接使用

    而且,本身 render 函数直接调用 computed 里的函数拿的值,因此楼主这里拿到的是 Promise<any>

    楼主不妨把这段代码放到 methods 里,把结果放到 data 里
    q540374501
        9
    q540374501  
       Apr 4, 2019
    血泪教训,千万不要试图在 async 里封装什么东西让人调用,调用者必须以 async/await 的结构调用才能取到值。然而这完全违背了封装的原意,vue 在渲染时直接把 computed 调用了,返回一个 promise,全部完蛋。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6321 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 799ms · UTC 02:38 · PVG 10:38 · LAX 19:38 · JFK 22:38
    ♥ Do have faith in what you're doing.