想实现如下功能:
用户测试结果会保存在云数据库中,但是如果该用户的测试结果大于N条,就从前删除最老的那条。
出现的问题是:Part 1部分的程序执行顺序好像是晚于Part 2部分的代码(至少应该是同时运行的?)。因为我看程序的数据打印顺序,总是先打印了Part 2,然后再打印Part 1的num。
这造成的结果就是那个if语句的判断形同虚设… 不论num统计出来的数量是多少,总会先执行添加数据的部分(因为函数里初始化num=0,所以会直接进入到添加数据的程序里)。
不知道这个问题应该怎么解决?这个问题是不是牵涉到了小程序的同步/异步执行问题呢?
.js文件中写的代码大致如下(else下的删除数据的逻辑未写完):
danshen:function(){
var num = 0 // 初始化num
var id_danshen = "XXXX"
this.setData({
id_danshen:"XXXX"
});
// Part 1 使用云函数count统计数据的数量
wx.cloud.callFunction({
name:'count',
success:res=>{
var num = res.result.total
console.log(num)
}
})
// Part 2 如果数量小于等于10,则添加数据
if (num<=10){
var date = new Date();
db.collection('userInfo').add({
data:{
result: id_danshen,
posttime: date.getSeconds(),
},
success:res=>{
console.log(res);
}
})
}
// Part 3 如果数量大于10,则删除最老的数据(未写完)
else{
db.collection('userInfo').remove()
}
},
建议百度一下JS异步问题。
把你的if逻辑写在这个success的回调里。
判断放成功回调里面
是你写的代码有问题,不是的程序执行有问题
JS是异步执行的,利用async/await来解决(具体自行百度),或者把下一步执行代码放在上一步的success里面。
这是js同步异步 社区高频问题 不学不行