ウィジェットがユーザー情報を取得できない問題


ウィジェットがユーザー情報を取得できない問題
1.はじめに
ウィジェットはjsコードで書かれているので、私はjsが特によく勉強していないので、最初はjsがjavaと1行、1行1行の実行だと思っていましたが、後で気づいたのですが、全くそうではありません.だから、時々、ユーザー情報とopenIdを取得するときに、バックグラウンドにリクエストを送るので、まだデータが戻っていないことを要求する可能性があります.ウィジェット側はすでに値をつけています.undifineは1つしか得られません.とても心配しています.それからjsコードをたくさん見てから、この問題を処理する良い方法があることに気づきました.コールバック、要求が戻ってきたら、コールバックして、データを得ることができます.実は微信の公式ドキュメントもコールバック関数を追加することを説明していますが、私はこのコールバック関数を見てもどのように使うか分かりません.インターネットの検索もすべて微信のドキュメントを剽窃して、新しい意味がありません
2.app.jsでのユーザ情報の取得
  onLaunch: function () {
    //         

    var that = this ;
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    
    //   
    wx.login({
      
      success: res => {
        //    res.code       openId, sessionKey, unionId
        var code = res.code;
        var user =null;
        // wechatUtil
        wechatUtil.req("/user/login", { "code": code }, function (res) {
          console.log("  openId  ");
          console.log(res);
          if (res.resultCode == 200) {
            that.globalData.user = res.resultContent;
            user = res.resultContent;
            // this.setData({
            //   user: res.resultContent
            // });
            // that.data.user = res.resultContent;
          } else {
            console.log("  openId  ,msg:" + res);
          }
		
		//    getUserInfo      ,     Page.onLoad      
        //        callback        
          if (that.userCallback) {
            that.userCallback(res)
          }
        });
      }
    })
  },

3.OpenIdを取得した場所でコールバックの呼び出しを追加する
onLoad: function () {
    var that = this;
    
    if (app.globalData.user && !JSON.stringify(app.globalData.user)){
      that.setData({
        user: app.globalData.user
      })
    }else{
      app.userCallback = res =>{
        console.log("----------------------------res="+res);
        if(res != null){
          this.setData({
            user: res.resultContent
          })
        }
      }
    }
 }

4.後言
小さなプログラムの穴は確かに多いですが、ドキュメントをよく読むと解決できるので、ドキュメントをたくさん読みましょう.