本意是想做一个用户使用记录的集合!
实现的时候,利用云函数,获取openid,并在云函数中,检测是否已经有此openid记录,如无,就加入云端集合!
在app.js的onLaunch中调用云函数!并将是否为新用户的变量,以及openid,记录id 保存进全局变量中!
但是,新用户,在通过扫描createQRCode生成的二维码,进入页面时! onload中,获取全局变量为undefined
迫不得已,自己在需要通过二维码扫描进入的页面的onload函数中,再次调用获取openid的云函数,以实现,新老用户变量,已经用户信息记录id的获取!
这时,又出现了问题! app.js中的云函数调用,以及页面onload的调用,同时运行了! 由于两个调用,都被执行,而且调用完成顺序未知,就产生了bug!
有没有大神,给提出以下,解决思路,不胜感激
用回调函数实现按顺序执行
app.js中onLaunch中的调用
wx.cloud.callFunction({
name: "login"
}).then(res => {
console.log(res.result)
//调用login函数,获取当前用户的openid,将此openid在集合中检查,是否为新用户,如果为新用户,创建记录,返回记录id!保存进app.globalData.openidIng!
//如果为老用户,返回这个老用户的记录id
//app.globalData.openidIng 保存当前用户的openid
// yonghu中保存新老用户表示,新用户值为new 老用户值为old
this.globalData.openidIng = res.result.openid
this.globalData.jilu_id = res.result.jilu_id
this.globalData.yonghu = res.result.yonghu
})
二维码进入页面onload中,有一个判断,二维码进入的分支代码:
console.log(app.globalData)//这里可以打印出app.js中保存的对象数据
console.log(app.globalData.yonghu)//这里,却无法打印出属性的数据,都是undefined
//由于无法获取这个数据,所以,自己才再次调用云函数
wx.cloud.callFunction({
name: "login"
}).then(res => {
console.log(res)
var openidIng = res.result.openid;
var jilu_id = res.result.jilu_id;
// var yonghu = res.result.yonghu;//本来用的是本次调用的结果属性进行赋值,却无法达到效果!这里看到的是,app.js中云函数先执行,这里后执行,导致,新用户,变成老用户,无法达到预期
var yonghu = app.globalData.yonghu;//然后换成这句,再次获取全局变量的值,这里却获取到了!并且下一句,可以打印成功!多次执行,app.js中的调用,是先执行完成!结果运行理想! 但是偶尔出现,本页面的云函数先执行完成,app.js调用后执行完毕,又无法到达预期!
console.log(yonghu)//
// 如果当前用户为新用户,直接添加浏览记录,并且为分享人,添加邀请记录
if (yonghu == "new") {
console.log("新用户二维码进入")
wx.cloud.callFunction({
name: "userAddID",
data: {
bianhao: bianhao,
jilu_id: jilu_id
}
}).then(res => {