前言:微信小程序中,onLaunch 方法和 onLoad 方法是同時執行的,但是有時我們需要等 onLaunch 方法執行完畢之后在 onLoad 方法中獲取某個網絡請求得到的值,由於網絡請求有時會比較慢,所以 onLoad 方法可能在 onLaunch 方法之前執行,這時候我們可以自定義 Callback 回調函數來解決問題
實例:在小程序啟動時的 onLaunch 方法中網絡請求一組數據放入 globalData 全局變量中,在頁面的 onLoad 方法中獲取全局變量
app.js代碼
App({ //小程序啟動后觸發 onLaunch: function() { http.postRequest("Home/GetSysInfo", "", res=> { //存入全局變量 this.globalData.tabtext = res.Data; // 由於 GetSysInfo 是網絡請求,可能會在 Page.onLoad 之后才返回 // 所以此處加入 Callback 以防止這種情況 if (this.getSysInfoCallback) { this.getSysInfoCallback(res) } }, function(res) { console.log("網絡請求失敗!") }); }, //設置全局對象 globalData: { tabtext: [], //系統文字信息 } })
.js代碼
onLoad: function() { //Object.keys().lenght判斷全局數組中是否有值 if (Object.keys(getApp().globalData.tabtext).length>0) { //如果有值,則從全局變量中取值 this.setData({ titletext: app.globalData.tabtext[0].Desc }) } else { //如果無值,調用Callback回調函數直接取值 app.getSysInfoCallback = res => { this.setData({ titletext: res.Data[0].Desc }) } } }
End!