前言:微信小程序中,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!
