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 对象。永远都成立渲染。
老哥这种行为应该是行不通的,Vue的双向绑定是在data里声明好的,你的这个方法是立即执行的,Promise有了结果之后并不会再触发一次渲染 async 和await 成对使用 await new Promise() 这样试试 只能异步转同步了 看了一下。楼主好像是不想多设置一个变量去控制v-if吧。那哥你有没有想过,这函数。每次页面渲染只调用一次啊。再者小说更新了之后我点进去看了按照这个逻辑“”有更新“”这个提示应该也不会消失吧?【不清楚你那个获取信息的函数怎么写的】,对于前端来说用来控制页面渲染的变量别省就是了 对于Promise 你可以改成这样async gg(book){
let q = await this.getBookUpdateInfo(book);//异步等待
console.log(q);
return q;
}, PPZ丿皮皮智 发表于 2022-4-3 10:50
对于Promise 你可以改成这样async gg(book){
...
这个在v-if中 不会返回q=false 或者 true 而是返回 promise对象;对于v-if会永远是真。
放弃这个写法了。 PPZ丿皮皮智 发表于 2022-4-3 10:42
看了一下。楼主好像是不想多设置一个变量去控制v-if吧。那哥你有没有想过,这函数。每次页面渲染只调用一次 ...
不能偷懒太难受~ 用computed 计算属性呢,将gg这个函数放计算属性里面,然后返回gg函数获取的值是true还是false as614001 发表于 2022-4-3 11:21
这个在v-if中 不会返回q=false 或者 true 而是返回 promise对象;对于v-if会永远是真。
放弃这个写法了 ...
await会异步等待结果返回才会return的
页:
[1]