微信小程序:通过回调解决先执行onLaunch后执行onload的问题

25 篇文章 1 订阅
19 篇文章 1 订阅

背景:刚打开小程序的时候会小程序会执行onLaunch方法,执行完之后执行onload方法,但是当我们在onLaunch方法里执行异步操作,例如调用wx.login、使用request调用后台接口,就不能保证onLaunch方法中所有调用方法执行完成后执行onload。当我们在onload方法中需要onLaunch方法中获取的某些数据时,会导致数据获取不到。

promise(不行)

我一开始想的使用promise解决异步问题,但是不行,promise只能保证后台接口一个一个调用,但是整个promise走下来还是异步的,他不能保证onLaunch执行完之后执行onload

回调(可以解决)

var callBack=null;
onLaunch() {
  //获取数据相关代码
  //如果onload先执行,那么执行回调
  if(app.callBack){
    app.callBack();
  }
},
onLoad: function (options) {
	//如果我需要的数据不为空
	 if(app.globalData.userInfo.userId!=null){
	   //通过是该数据进行下一步操作
	   that.getInfo();
	 }else{
	 //如果没有改数据,我把要执行的操作封装成一个方法,等onLaunch获取到再执行
	   app.callBack = that.getInfo;
	 }
},

整个流程就是onLaunch与onload同时执行,onLaunch执行完之后根据callBack有没有值,如果有值,证明onload已经执行完了,并且还没有获取数据,然后调用callback获取数据。
如果没有值,证明onload还没有执行,这时我们已经获取到onload所需要的数据,onload需要获取的时候就会去获取。

当然这种方法也有缺陷,如果小程序初始页面很多的话,就需要每一个页面的onload都使用这种模式,很不方便。
博主暂时想不到更好的办法,若果有大佬能只修改onlaunch代码而不动onload代码的方法,还请您不吝赐教。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狴犴ys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值