微信小程序app.js的onLaunch执行完之后再执行Page的onLoad & 小程序onLaunch和onLoad执行顺序
程序员文章站
2022-07-03 09:34:08
...
小程序初始化:
首先触发App里的onLaunch
再执行页面Page里的onLoad:
问题: 在onLaunch里请求去获取是否有权限,等待返回值的时候, Page里的onLoad事件就已经执行.
小程序网络请求默认为异步请求,在appjs的onLaunch运行后进行异步请求时,程序不会停止,Page页已执行onload, 我们希望onLaunch执行完后再执行onload。
目标: onLaunch 请求完 -> 再执行Page的onLoad方法
解决方法:定义回调函数
//app.js
App({
onLaunch: function () {
wx.request({
url: 'http://test.cn/login', //仅为示例,并非真实的接口地址
data: {},
success: function(res) {
this.globalData.checkLogin = true;
//由于这里是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.checkLoginReadyCallback){
this.checkLoginReadyCallback(res);
}
}
})
},
globalData: {
checkLogin: false
}
})
//index.js
//获取应用实例
const app = getApp()
Page({
data: {
test: false
},
onLoad: function () {
let that = this;
//判断onLaunch是否执行完毕
if (app.globalData.checkLogin){
that.setData({
test:true
})
}else{
app.checkLoginReadyCallback = res => {
that.setData({
test:true
})
};
}
}
})
执行顺序:[App] onLaunch -> [Page] onLoad -> [App] onLaunch sucess callback-> [Page] onLoad
上一篇: win10文件复制、删除及文件夹重命名不能自动刷新的解决方案
下一篇: 电脑系统系列--问题解决