微信小程式wx.login先執行onLaunch與onLoad載入順序問題

yzChen發表於2022-04-19

@

遇到問題

請求api返回需要先登入,實際上登入已成功

想必大家在開發小程式的時候,肯定遇到了頁面請求資料載入介面先執行,wx.login()登入介面後執行,導致請求介面返回請先登入,實際上登入確實成功的異常情況!

問題分析

在微信小程式中,由於app.js中的onLaunch和其他頁面中js的onLoad屬於非同步執行。
有時onLaunch中會有網路請求,在等待網路返回值時,也就是還未執行完時,其他頁面中js的onLoad已經執行了。這時就會導致頁面中的onLoad函式沒有獲取到登入成功後的token以及其他必備引數,從而導致請求介面時,因為缺失必備引數獲得的返回值異常的情況。

解決問題

自定義回撥函式

這裡我們在app.js中,自定義一個名為 loginCallback 回撥函式,然後再頁面的onLoad()函式中,監聽 loginCallback 函式的執行,繼續完成需要執行的操作即可。

app.js

App<IAppOption>({
  onLaunch(options) {
    let that = this;

	wx.login({
	  success: res => {
	    api.login(res.code, scene).then(() => {
	      if (that.loginCallback){
	        that.loginCallback(1);  // 執行自定義回撥函式
	      } 
	    });
	  },
	});
  });
});

index.js

const app = getApp<IAppOption>()

Page({
  onLoad() {
	app.loginCallback = flag => {  // 監聽自定義回撥函式執行
	  if(flag) {
	    api.post('/xxxxxxxxxxxxx').then((res) => {  // post api
	      // do something
	    });
	  }
	}
  })
})

擴充套件提問

上述程式碼中,app.js裡 loginCallback 其實並未單獨定義,但是也能夠執行成功,是為什麼呢?

學習交流

隨機數字隨機幸運數+

微信小程式wx.login先執行onLaunch與onLoad載入順序問題

My Blog

blog.guijianpan.com

技術交流

weixin-x175.jpg

相關文章