1. 程式人生 > >小程式 onLaunch在onLoad後執行問題

小程式 onLaunch在onLoad後執行問題

專案中遇到這樣一個問題就是需要登入之後存一個id然後發現第一次進來的時候登入方法在index的方法後執行 拿不到想要的值

解決辦法

1.就是可以加一個啟動頁 做個緩衝

2.用promise

直接看程式碼例項吧

這是我的app.js

//app.js
App({
  onLaunch: function(options) {
    // 小程式啟動邏輯
    // 1. 登入
    // 2. 檢視使用者是否授權
    // 3. 獲取使用者的裝置資訊
    var thisPage = this;
    console.log(options);
    if (options.path !== "pages/index/index") {
      console.log(1111);
      this.globalData.destPath = options.path;
    }
    wx.showLoading({
      title: "登入中",
      mask: true
    });
  },
  // login
  getLogin() {
    var that = this;
    return new Promise(function(resolve, reject) {
      // 登入
      wx.login({
        success: res => {
          console.log(res);
          //todo 傳送 res.code 到後臺換取 openId, sessionKey, unionId
          wx.request({
            url: that.globalData.serverHost + "/sa/login",
            data: res.code,
            method: "post",
            success: function(res) {
              console.log(res);
              wx.hideLoading();
              if (res.data.code === 0) {
                resolve(res);
              } else {
                wx.showToast({
                  title: "登入失敗,請重新啟動小程式",
                  mask: true
                });
                reject('error');
              }
            },
            fail: function(data) {
              wx.hideLoading();
              console.log(data);
            }
          });
        }
      });

    });
  },
  globalData: {
    userInfo: null,
    authorized: false,
    systemInfo: null,
    systemInfoStr: null,
    sessionToken: "",
  }
});

重點再這

千萬別漏掉成功裡的resolve(res);不然沒辦法執行then方法

這是index。js

  onLoad: function() {
    var that =this;
    app.getLogin().then(function (res) {
      console.log(res)
      that.attached();//初始化頁面資料
    })
  },