+
80
-

uniapp、小程序、h5的page页面onload方法如何在onLaunch执行完后再触发?

uniapp、小程序、h5的page页面onload方法如何在onLaunch执行完后再触发?

因为onLaunch中有首次request登录请求,请求完成后再执行页面page的onload方法?

网友回复

+
0
-

有两种方案可以实现,浏览器需要支持es6

方案一

1、main.js添加如下代码
Vue.prototype.$onLaunched = new Promise(resolve => {
    Vue.prototype.$isResolve = resolve
})

2、应用启动时,设置需要等待的逻辑

在 App.vue 的 onLaunch 中增加代码 this.$isResolve()

这个方法必须在你的业务如ajax执行完毕后再执行 另外注意要用箭头函数,否则this不好使
onLaunch: function() {
	console.log('App Launch');

	console.log('倒计时10秒');
	setTimeout(() => {
	    console.log('倒计时结束');
	    this.$isResolve()
	},5000);
},

3、在页面 onLoad 中增加等待代码 await this.$onLaunched

注意onload要添加async,否则编译不过去

async onLoad(option) {
	//等待倒计时	
	await this.$onLaunched;
	console.log("等待倒计时结束后打印");

	// 后续业务逻辑
},

4、在chrome运行截图如下,小程序等支持ES6环境才行

800_auto

方案二

1、main.js

Vue.prototype.$visitStore = async (option)=>{
	//页面入参option

	//自己的业务逻辑	

	//如果是ajax,注意要加同步等待
	await Vue.prototype.http.post('/customer/updateLastVisitStoreId',{lastVisitStoreId:storeId}).then(res => {		
		console.log(res);

	}).catch(err => {
		console.log(err);
	})

}
2、页面
async onLoad(option) {			
	await this.$visitStore(option);//同步执行这个方法

}
我知道答案,我要回答