各位大佬新年好,我遇到如下问题,小程序云开发,页面加载时先查询云数据库数据,根据数据情况设置页面参数,现在不知道是不是异步问题,设置不了页面参数。
我的页面onload 函数如下:
data: {
allInfo: [],
sakliwahinimStat:false, //保存内容是否存在
saklaptima:'none', //表示已经保存了
saklimaptima:'block', //表示没保存
shoucangAsarId:'' //当前页商品id
},
onLoad: function (options) {
let that=this
//获取asarid
that.setData({shoucangAsarId:options.id})
//根据options.id 查收藏状态
that.shiFouShouCang(options.id)
if(that.data.sakliwahinimStat==true){
that.setData({
saklaptima:'block',
saklimaptima:'none'
})
}else{
that.setData({
saklaptima:'none',
saklimaptima:'block'
})
}
云数据库判断函数:
shiFouShouCang(asarId){
//判断是否收藏,根据状态制定图标状态
db.collection('sakliwahanlirim').where({
asarId:asarId
}).count().then(res=>{
if(res.total>0){
that.setData({sakliwahinimStat:true})
}
else{
that.setData({sakliwahinimStat:false})
}
})
},
我的想法是先从数据库里查询数据,然后设置页面状态,我这样有问题吗,帮我看看,谢谢
就是异步问题,用async await
----------------------
async checkFuc(){
console.log('2--checkFuc jiazai')
const do1=await this.shiFouShouCang(this.data.shoucangAsarId)
console.log('5--'+this.data.sakliwahinimStat)
},
---------------------
shiFouShouCang(asarId){
db.collection('sakliwahanlirim').where({
asarId:asarId
}).count().then(res=>{
if(res.total>0){
console.log('3--'+res.total)
this.setData({sakliwahinimStat:true})
console.log('4--'+this.data.sakliwahinimStat)
}
else{
this.setData({sakliwahinimStat:false})
}
})
},
------------------------
结果
1--onload jiazai
2--checkFuc jiazai
6--false
8--false
5--false
undefined
3--2
4--true
这运行顺序也搞不懂
onLoad: function (options) {
console.log('1--onload jiazai')
//获取asarid
this.setData({shoucangAsarId:options.id})
//判断是否收藏,根据状态制定图标状态
this.checkFuc();
console.log('6--'+this.data.sakliwahinimStat)
if(this.data.sakliwahinimStat==true){
console.log('7--'+this.data.sakliwahinimStat)
this.setData({
saklaptima:'block',
saklimaptima:'none'
})
}else{
console.log('8--'+this.data.sakliwahinimStat)
this.setData({
saklaptima:'none',
saklimaptima:'block'
})
}
---------------------- async checkFuc(){ console.log('2--checkFuc jiazai') const do1=await this.shiFouShouCang(this.data.shoucangAsarId) console.log('5--'+this.data.sakliwahinimStat) }, --------------------- shiFouShouCang(asarId){ db.collection('sakliwahanlirim').where({ asarId:asarId }).count().then(res=>{ if(res.total>0){ console.log('3--'+res.total) this.setData({sakliwahinimStat:true}) console.log('4--'+this.data.sakliwahinimStat) } else{ this.setData({sakliwahinimStat:false}) } }) }, ------------------------ 结果 1--onload jiazai 2--checkFuc jiazai 6--false 8--false 5--false undefined 3--2 4--true 这运行顺序也搞不懂
不一定非要将异步改成同步,异步就不能渲染页面了吗?
你将渲染代码写在异步回调里就行了。
问题是你这里面没有调用云函数,数据库查询是放在云函数里的