// app.js
App({
globalData: {
userInfo: null,
visitorNotify: {
visitorExist: false,
visitorNumber: ''
}
},
async checkLogin() {
const db = wx.cloud.database()
const user = await wx.cloud.callFunction({
name: 'loginCheck',
data: {}
})
const re = await db.collection('user').where({
openid: user.result.openid
}).get().then(res => {
this.userInfo = res.data[0]
this.globalData.userInfo = res.data[0];
})
},
async onLaunch() {
wx.cloud.init({
env: 'green-7gnsotdye1b374a3',
traceUser: true
})
await this.checkLogin();
await this.notifyPlus();
},
async notifyPlus() {
const db = wx.cloud.database()
await db.collection('notify').where({
notifyType: 1,
notifyOpenid: this.globalData.userInfo.openid,
}).watch({
onChange: (snapshot) => {
if (snapshot.docChanges.length) {
console.log(snapshot.docChanges);
this.globalData.visitorNotify.visitorExist=true
this.globalData.visitorNotify.visitorNumber=snapshot.docChanges.length
}
},
onError: (err) => {
console.error('the watch closed because of error', err);
}
})
console.log('登录了')
}
})
这是tabber页面的首页面,
这是tabber的其他页面,这个页面可以获取到globalData的数据,首页的tabber就不行,这是为什么?
因为你访问其他页面的时候,有一个时间差,所以数据已经存在globaData里面了啊,但是首页和app.js是同时加载的,你拿数据的时候,接口请求都还没有回来,哪里来的数据嘛
第一种:在有首次加载得页面都先同步调用一次
第二种:就是还是在app.js里面调用,但是你得先等数据回来了,在去触发其他页面中通过globalData获取值
我用的是第一种方法
在首页的onLoad里调用
任何其他页面,凡有类似获取不到情况的,一律:
重复调用的情况,在app.xxx里判断,如果已经获取过,则直接返回结果。