当前位置:   article > 正文

微信小程序:通过回调解决先执行onLaunch后执行onload的问题_微信小程序 打开好友分享的页面 会走onlaunch吗

微信小程序 打开好友分享的页面 会走onlaunch吗

背景:刚打开小程序的时候会小程序会执行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();
  }
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
onLoad: function (options) {
	//如果我需要的数据不为空
	 if(app.globalData.userInfo.userId!=null){
	   //通过是该数据进行下一步操作
	   that.getInfo();
	 }else{
	 //如果没有改数据,我把要执行的操作封装成一个方法,等onLaunch获取到再执行
	   app.callBack = that.getInfo;
	 }
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/284446
推荐阅读
相关标签
  

闽ICP备14008679号