收藏
回答

setData后,新增加的,无法获取?

onload 内

var that = this

util.ilogin(that, {}) //这里面已经正常设置 memberinfo ,appdata中可以看到

console.log(that.data.memberinfo) //可是这里为 undefined 这是什么问题呢?


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

3 个回答

  • Devil
    Devil
    2020-03-14
    util.ilogin是个异步吧?
    
    2020-03-14
    有用 3
    回复 6
    • 大李伟
      大李伟
      2020-03-14
      util.ilogin 里是request后设置的memberinfo,这样做不可以是吗?
      2020-03-14
      回复
    • Devil
      Devil
      2020-03-14回复大李伟
      当然可以啊,从后端拿数据都要有这个过程。上面代码的问题是,你调用util.ilogin之后,马上执行了console.log,这个时候request还没拿到数据呢,所以就是undefined了
      2020-03-14
      回复
    • 大李伟
      大李伟
      2020-03-14
      我这个ilogin是这样的:


      function ilogin(that,params){
          var userid = wx.getStorageSync('_userid')
          if (userid){
              irequest(getApp().globalData.url + 'login', {
                  data: { userid: userid },
                  success: function (res) {
                      if (res.type == 'error') {
                          idologin(that, {})  //这个是去wx.login 获取code 返回用户资料 写本地存储 userid  modelid 一类的
                      } else {
                          wx.setStorage({
                              key: '_userid',
                              data: res.userid,
                          })
                          wx.setStorage({
                              key: '_modelid',
                              data: res.modelid,
                          })
                          wx.setStorage({
                              key:'_status',
                              data: res.status,
                          })
                          that.setData({
                              memberinfo: res
                          })
                         
                      }
                  },
                  complete:function(){
                      params.complete && params.complete()
                  }
              })
          }else{
              idologin(that,{}) //这个是去wx.login 获取code 返回用户资料 写本地存储 userid  modelid 一类的
          }
      }
      2020-03-14
      回复
    • 大李伟
      大李伟
      2020-03-14回复Devil
      如果我想确定 数据已经set好了,如何确认啊?
      2020-03-14
      回复
    • Devil
      Devil
      2020-03-14回复大李伟
      在这个callback里,或者把util.ilogin封装成promise,可以减少嵌套
      2020-03-14
      回复
    查看更多(1)
  • 大李伟
    大李伟
    2020-03-14

    谢谢各位,我明白了

    function ilogin(that,params){

    var userid = wx.getStorageSync('_userid')

    if (userid){

    irequest(getApp().globalData.url + 'login', {

    data: { userid: userid },

    success: function (res) {

    if (res.type == 'error') {

    idologin(that, {

    success:function(res){

    params.success && params.success(res)

    }

    })

    } else {

    wx.setStorage({

    key: '_userid',

    data: res.userid,

    })

    wx.setStorage({

    key: '_modelid',

    data: res.modelid,

    })

    wx.setStorage({

    key: '_status',

    data: res.status,

    })

    params.success && params.success(res)

    }

    },

    complete:function(){

    params.complete && params.complete()

    }

    })

    }else{

    idologin(that, {

    success: function (res) {

    params.success && params.success(res)

    }

    })

    }

    }


    util.ilogin(that, {

        success:function(res){

            that.setData({

                memberinfo:res

            })

            console.log(that.data.memberinfo)

        }

    })

    2020-03-14
    有用
    回复
  • ئىلچىن
    ئىلچىن
    2020-03-14

    你试着在onready 中获取一下memberinfo

    2020-03-14
    有用
    回复 2
    • Mr.Zhao
      Mr.Zhao
      2020-03-14
      其实写在onReady里,道理都是一样的,还是获取不到的,异步执行需要事件,onready触发了,那个异步还没执行,就出现楼主这个问题了
      2020-03-14
      回复
    • ئىلچىن
      ئىلچىن
      2020-03-14回复Mr.Zhao
      嗯,他太辛苦了。都2020年了还不去拥抱 Promise
      2020-03-14
      回复
登录 后发表内容
问题标签