收藏
回答

关于全局变量的问题

onLaunch: function () {

wx.getSetting({

      success: res => {

        if (res.authSetting['scope.userInfo']) {

          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

          wx.getUserInfo({

            success: res => {

              // 可以将 res 发送给后台解码出 unionId

              this.globalData.userInfo = res.userInfo


              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

              // 所以此处加入 callback 以防止这种情况

              if (this.userInfoReadyCallback) {

                this.userInfoReadyCallback(res)

              }

            }

          })

        }

      }

    })

}

globalData: {

   userInfo: null,

  }

这里用

if (this.userInfoReadyCallback) {

                this.userInfoReadyCallback(res)

              }

处理了,在别的页面的onLoand用app.globalData.userInfo取到的还是null,用

console.log查看打印顺序仍然是先执行onLoand的,请问怎么解决。


最后一次编辑于  2018-11-30  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 土豆豆
    土豆豆
    2018-12-03

    生命周期函数只是触发,不会等待

    2018-12-03
    赞同 2
    回复 1
    • 邓不重
      邓不重
      2018-12-03

      能否说的清楚一些,我刚接触小程序,这个问题看了很多博客了说的都不统一,有些晕了,顺便能给个解决方法吗? 现在的情况是这样的:之前在app.js定义

      wx.login({

            success: res => {

              this.globalData.jscode = res.code;

              if (this.getInfoCallback ) {

                this.getInfoCallback (res)

              }

            }

          })

      globalData: { jscode:null }, 在其他页面用app.globalData.jscode取一直是null,然后今天突然能取到了,但在首页无效。 之前取不到时代替方法是:在app.js

      if (this.getInfoCallback ) {

                this.getInfoCallback (res)

              } 在用到页面用:

          app.getInfoCallback = res => {

            console.log('查看得到的数据2:', res)

          }

      但这个方法只在首页有效,在其他页面无效




      2018-12-03
      回复
  • 邓不重
    邓不重
    2018-12-03

    刚才用app.golablData.usreInfo又能拿到了,前面一直不行,试着试着又突然可以了,而且只能在别的页面拿到,首页就拿不到,首页只能用

    app.userInfoReadyCallback = res => {

            console.log('查看得到的数据:', res)

          }

    拿到,而这个方法在别的页面又无效。我真是越来越搞不懂了


    2018-12-03
    赞同
    回复 1
    • 管凯旋
      管凯旋
      2018-12-03

      首页和app.js是异步执行的兄嘚

      2018-12-03
      1
      回复
  • Albert Einstein [官]
    Albert Einstein [官]
    2018-11-30

    请注意处理异步的时序问题。如果不能解决,建议贴出较完整的代码。

    2018-11-30
    赞同
    回复 8
    • 邓不重
      邓不重
      2018-11-30

      //app.js

      App({

        onLaunch: function () {

          // 展示本地存储能力

          var logs = wx.getStorageSync('logs') || []

          logs.unshift(Date.now())

          wx.setStorageSync('logs', logs)

       

          // 登录

          wx.login({

            success: res => {

              // 发送 res.code 到后台换取 openId, sessionKey, unionId

              this.globalData.jscode = res.code

              console.log(res)

              console.log('1',this.globalData.jscode)

              if (this.userInfoReadyCallback) {

                this.userInfoReadyCallback(res)

              }

            }

          })

          // 获取用户信息

          wx.getSetting({

            success: res => {

              if (res.authSetting['scope.userInfo']) {

                // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

                wx.getUserInfo({

                  success: res => {

                    // 可以将 res 发送给后台解码出 unionId

                    this.globalData.userInfo = res.userInfo


                    // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

                    // 所以此处加入 callback 以防止这种情况

                    if (this.userInfoReadyCallback) {

                      this.userInfoReadyCallback(res)

                    }

                  }

                })

              }

            }

          })

        },

        globalData: {userInfo: null,}

      })//test.js

      const app = getApp();

      Page({

        data: {},

        onLoad: function () {

          console.log('2',app.globalData.userInfo)

      });



      2018-11-30
      回复
    • Albert Einstein [官]
      Albert Einstein [官]
      2018-11-30回复邓不重

      不能保证您的 Page.onLoad 执行之时,app.globalData.userInfo 已经赋值成功。因为 wx.login、wx.getSetting、wx.getUserInfo 的回调可能没有执行或者没有全部执行。

      2018-11-30
      回复
    • 邓不重
      邓不重
      2018-11-30回复Albert Einstein [官]

      if (this.userInfoReadyCallback) {

                      this.userInfoReadyCallback(res)

                    }

      那这个没有起作用吗

      2018-11-30
      回复
    • 。。。。
      。。。。
      2018-12-01回复邓不重

      你这个是判断有没有回调函数。。。

      2018-12-01
      回复
    • 邓不重
      邓不重
      2018-12-03回复。。。。

      我在index.js页面用

      app.userInfoReadyCallback = res => {

              console.log('查看得到的数据:', res)

            }

      是能拿到数据的,但在另一个页面(比如first.js)用这个又什么都没打印,这是为什么呢?

      2018-12-03
      回复
    查看更多(3)