小程序學習(二)

Page中的方法比app.js先執行的解決方案

問題描述

在小程序開發中,通常是在app.js中調用微信的登陸接口獲取 open_id,這個過程是異步的;而咱們在page的onload中常常須要使用 open_id 做爲請求參數去請求其餘的業務接口或執行某些方法。這樣很容易出現的問題就是app.js中的open_id尚未返回,pages中的方法就已經執行完了。小程序

解決方案

在globalData中定義一個標誌位,標識app.js中的請求是否完成;在page中根據這個標誌位肯定是否執行,若是app.js中請求完成,則直接請求便可;不然,定義一個全局回調函數去執行相同的代碼,並在app.js中調用。感受本身沒有描述清楚,看段代碼吧~微信

app.jssession

App({
  onLaunch: function () {
    // login
    wx.login({
      success: res => {
        // 發送 res.code 到後臺換取 openId, sessionKey, unionId
        wx.request({
          url: `request url`,
          data: {
            code: res.code,
          },
          success: res => {
            // your code
            this.globalData.isEnd = true;
            if (this.callback) {
              this.callback();
            }
          }
        })
      }
    })
  },
  
  globalData: {
    isEnd: false,
  }
})
複製代碼

Pageapp

const app = getApp();
Page({
  onLoad: function(options) {
    if (app.globalData.isEnd) {
      // 執行你的方法
    } else {
      app.callback = () => {
        // 執行你的方法,跟上面的代碼一致
      }
    }
  }
})
複製代碼

未完待續~異步

相關文章
相關標籤/搜索