这是我在一个页面对应的js文件里写的一个函数,预期实现的效果是:
用户在页面点击按钮,执行绑定的initClassNum()。这个函数的逻辑是先调用creatClassNum()生成随机数,再通过查询判断该随机数有没有和云数据库里的重合,重合了的话就再调用creatClassNum(),并再进行判断,直到生成的随机数与云数据库中的不重合为止。最后把该num赋值给页面里的classNumber。
initClassNum: function(){
var num = '';
var result_length = -1; // 查询结果的数组长度,为0表示班级码可以使用,大于0表示重复了
let that = this;
do{
// 生成班级码
num = this.creatClassNum();
console.log('生成的班级码', num)
// 检查该班级码是否已经存在于云数据库
const db = wx.cloud.database();
db.collection('class').where({
number: num
}).get()
.then(res =>{
console.log('数据库匹配结果', res.data.length)
result_length = res.data.length
})
.catch(err=>{
console.error(err)
})
}while(result_length != 0);
// 将班级码放入页面数据
that.setData({
classNumber: num
})
},
但实际执行过程中我发现循环不会停止......通过console.log(result_length),我发现原因在于result_length = res.data.length并不能更改整个函数里result_length的值,所以result_length一直为-1,循环也一直不会停。。。。。。
请问是什么原因造成的呢?是因为云数据库查询是异步操作的原因吗?还是因为var变量的作用域。。。?
更改的话我又应该改成什么样呢?百思不得其解。。。。
用GUID,应该就不用考虑是否重复了吧
异步问题,while 内容写在 then 里面