小程序页面异常请稍后重试,小程序分享功能实现
文章目录promise (不行)回调(可以解决) ) ) )。
背景:打开applet后,applet立即执行onLaunch方法,执行后执行onload方法,但onLaunch (例如,调用wx.login或使用request调用后台接口) 如果我们需要onload方法中通过onLaunch方法获取的部分数据,就无法获取数据。
promise (不行)我首先想到的是用promise解决异步问题,但不行。 promise只能确保每次调用一个后台接口,但整个promise下行是异步的。 他不能保证在onLaunch运行结束后再运行onload
回调(可解决) var callBack=null; 获取onLaunch ()//数据相关代码)如果onload先运行,则回调if ) { app.callBack ) { app.callBack ); },onload:function(options )//如果所需数据不是空if (app.global data.userinfo.userid )!=null(//通过此数据执行以下操作的that.getInfo ); (else(/如果未更改数据,请将要执行的操作封装到方法中,并在获取onLaunch后执行app.callBack=that.getInfo; }、整个流程同时运行onLaunch和onload,运行onLaunch后,根据callBack是否有值,如果有值,则运行onload,证明尚未获取数据,调用launch
如果没有值,则证明onload尚未运行。 此时,我们已经取得了onload所需的数据,需要onload取得时会取得。
当然这种方法也有缺点,如果小程序的初始页面很多,每页的onload都需要使用这种模式,不方便。
博主暂时想不出更多的方法,如果大人物有什么方法可以不动onload代码,只修改onlaunch代码的话,请一定要告诉我。