现象描述:微信小程序转发时,用户第一次进入小程序,转发页面用户信息处理异常
具体描述:使用wepy开发微信小程序时,在app的onLaunch()中使用async/await处理用户注册功能,比如(用户第一次登陆时,获取openId,在开发者服务器中处理用户信息–创建、更新等操作),app的onLaunch()中的方法还未处理完成,就开始处理转发页面onLoad()\onShow()就开始执行。转发页面onLoad()\onShow()需要用到用户的信息。没有获取到,就出了异常
问题:如何才能使app的onLaunch的处理用户信息的方法执行完成,再进行转发页面的onLoad()\onShow()
小程序这种多页面,估计很难处理这种并发的问题。
建议你在请求接口拦截器(使用了flyio之类的都有拦截器)之前校验一下有没有token,如果没有token则去请求登录接口。
https://wendux.github.io/dist/#/doc/flyio/interceptor 这里有flyio的教程
通过回调函数可以解决这个问题。
index.js onLoad: function (options) { getApp().initOkCallback = res =>{ //向目标填写一个函数 //相关业务操作 } app.js onLaunch: function () { //相关初始化操作 if (that.initOkCallback) { //如果这个方法存在 this .initOkCallback();执行回调函数 } } |
如果这个index为首页的话,在进入小程序时,onLoad与onLaunch是同时加载的。如果onLaunch中有初始化,并且onLoad中就要马上调用时,一定会出现异常。因此需要onLoad中写入回调对此异步加载进行阻塞,待onLaunch初始化成功一会,回调onLoad相关函数。
使用延迟器的方式也可以,但是会因为用户网络问题出现不可预估的异常。