小程序,app.js页面onShow如何获取onLaunch里request异步得到的数据?

如题
我先在app.js wx.login里面跟后台交互了一下 把openid传过来,然后放到globalData里面

  onLaunch: function () {
    wx.login({
      success: res => {
        wx.request({
         ....省略
          success: res =>{
            if (res.statusCode == 200){
              this.globalData.openid = res.data.openid;  //我在这里赋值
            }
          }       
        })
      }
    })

  },
  onShow:function(){
    console.log('onshow---',this.globalData.openid);   //但这里打印值是空的
  },

  globalData: {
    userInfo: null,
    openid:''
  },

但是在onShow周期里获取不到this.globalData.openid的值,请问如何操作?

阅读 8.9k
5 个回答

在自定义方法里面写个app.callback = fun , success if(this.callback)this.callback()啊

  onLaunch: function () {
    wx.login({
      success: res => {
        wx.request({
         ....省略
          success: res =>{
            if (res.statusCode == 200){
              this.globalData.openid = res.data.openid;  //我在这里赋值
              if(this.asd){
                  this.asd();
              }
            }
          }       
        })
      }
    })

  },
  onShow:function(){
     this.asd = res => {
      console.log(this.globalData.openid)
    }
  
  },

  globalData: {
    userInfo: null,
    openid:''
  },

你应该在 request 返回值后进行 回调。

异步方法请用回调。


看你更新重新给你回答一下,你这个人怎么这么轴,哈哈;

clipboard.png

看截图吧。你忽略其它东西。看和你写法差不多的敌方;

都说你的异步方法 不会阻塞onShow 的运行。

官方说了,要用this.setData()

注意this
先这样 const _this = this

 success: res =>{
            if (res.statusCode == 200){
              _this.globalData.openid = res.data.openid;  //this在这里绑定的不是app
              if(this.asd){
                  this.asd();
              }
            }
          }       
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题