as614001 发表于 2022-4-2 23:09

uniAPP或vue条件渲染异步问题

本帖最后由 as614001 于 2022-4-2 23:38 编辑

~~~
                                        <view class="text-gray text-sm" v-if="gg(item)" >
                                                <text class="cuIcon-lightfill text-yellowmargin-right-xs"></text>有更新</view>
                                        <view class="text-gray text-sm">
~~~
~~~
                        gg(book){
                              var q=false;

                                 this.getBookUpdateInfo(book).then(function(res){
                                        console.log(res);
                                        q=res;
                              });
                              return q;
                        },
                        async getBookUpdateInfo(book){
                              
                              //很长很多...
                        }
~~~
再做个检查书籍有没有更新的
有个条件渲染需机选返回确认状态,希望是直接返回,不需要在绑定一个变量来决定。因为其实是个v-for循环,会有很多,通过this.变量定义有点麻烦。
表达可能不清楚,因为不会vue 也不会js。
现在的情况是 没有等getBookUpdateInfo返回就已经异步q返回了。

如果给gg加了async 那么在 v-if返回其实是个 new Promise 对象。永远都成立渲染。

猛浪若奔 发表于 2022-4-3 09:34

老哥这种行为应该是行不通的,Vue的双向绑定是在data里声明好的,你的这个方法是立即执行的,Promise有了结果之后并不会再触发一次渲染

Elaborate 发表于 2022-4-3 10:37

async 和await 成对使用 await new Promise() 这样试试 只能异步转同步了

PPZ丿皮皮智 发表于 2022-4-3 10:42

看了一下。楼主好像是不想多设置一个变量去控制v-if吧。那哥你有没有想过,这函数。每次页面渲染只调用一次啊。再者小说更新了之后我点进去看了按照这个逻辑“”有更新“”这个提示应该也不会消失吧?【不清楚你那个获取信息的函数怎么写的】,对于前端来说用来控制页面渲染的变量别省就是了

PPZ丿皮皮智 发表于 2022-4-3 10:50

对于Promise 你可以改成这样async gg(book){
                                 let q = await this.getBookUpdateInfo(book);//异步等待
                                 console.log(q);
                                 return q;
                        },

as614001 发表于 2022-4-3 11:21

PPZ丿皮皮智 发表于 2022-4-3 10:50
对于Promise 你可以改成这样async gg(book){
                           ...

这个在v-if中 不会返回q=false 或者 true 而是返回 promise对象;对于v-if会永远是真。
放弃这个写法了。

as614001 发表于 2022-4-3 11:22

PPZ丿皮皮智 发表于 2022-4-3 10:42
看了一下。楼主好像是不想多设置一个变量去控制v-if吧。那哥你有没有想过,这函数。每次页面渲染只调用一次 ...

不能偷懒太难受~

lcbreak 发表于 2022-4-3 11:35

用computed 计算属性呢,将gg这个函数放计算属性里面,然后返回gg函数获取的值是true还是false

PPZ丿皮皮智 发表于 2022-4-7 10:14

as614001 发表于 2022-4-3 11:21
这个在v-if中 不会返回q=false 或者 true 而是返回 promise对象;对于v-if会永远是真。
放弃这个写法了 ...

await会异步等待结果返回才会return的
页: [1]
查看完整版本: uniAPP或vue条件渲染异步问题