收藏
回答

app.js的 globalData怎么在tabber的首页获取不到数据,在其他页面就能获取到?

// app.js
App({
  globalData: {
    userInfonull,
    visitorNotify: {
      visitorExistfalse,
      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',
      traceUsertrue
    })
    await this.checkLogin();
    await this.notifyPlus();
  },


  async notifyPlus() {


    const db = wx.cloud.database()
    await db.collection('notify').where({
      notifyType1,
      notifyOpenidthis.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就不行,这是为什么?


回答关注问题邀请回答
收藏

3 个回答

  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    03-16

    因为你访问其他页面的时候,有一个时间差,所以数据已经存在globaData里面了啊,但是首页和app.js是同时加载的,你拿数据的时候,接口请求都还没有回来,哪里来的数据嘛

    03-16
    有用 1
    回复 2
    • 盒河何
      盒河何
      03-16
      怎么解决呢?
      03-16
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      03-18回复盒河何
      你可以把app.js里面要调用得api封装起来
      第一种:在有首次加载得页面都先同步调用一次
      第二种:就是还是在app.js里面调用,但是你得先等数据回来了,在去触发其他页面中通过globalData获取值

      我用的是第一种方法
      03-18
      回复
  • 跨商通
    跨商通
    03-16

    在首页的onLoad里调用

    await app.xxx()
    


    任何其他页面,凡有类似获取不到情况的,一律:

    await app.xxx()
    

    重复调用的情况,在app.xxx里判断,如果已经获取过,则直接返回结果。

    03-16
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    发表于移动端
    03-15
    为什么要await 和 then一块用啊
    03-15
    有用
    回复 4
    • 盒河何
      盒河何
      03-15
      不一起用还是解决不了,首页的tabber页面拿不到数据,其他页面可以拿到
      03-15
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于移动端
      03-16回复盒河何
      赋值的地方打印1,取值的地方打印2,观察打印顺序
      03-16
      回复
    • 盒河何
      盒河何
      03-16
      先取值,后赋值
      03-16
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于移动端
      03-16回复盒河何
      首页调用app.js的函数,确保执行顺序
      03-16
      回复
登录 后发表内容