现象描述:微信小程序转发时,用户第一次进入小程序,转发页面用户信息处理异常
具体描述:使用wepy开发微信小程序时,在app的onLaunch()中使用async/await处理用户注册功能,比如(用户第一次登陆时,获取openId,在开发者服务器中处理用户信息--创建、更新等操作),app的onLaunch()中的方法还未处理完成,就开始处理转发页面onLoad()\onShow()就开始执行。转发页面onLoad()\onShow()需要用到用户的信息。没有获取到,就出了异常
问题:如何才能使app的onLaunch的处理用户信息的方法执行完成,再进行转发页面的onLoad()\onShow()
https://developers.weixin.qq.com/s/glnZpwmI7g3t
增加一个开屏页,在开屏页里请求完成后携带参数跳转指定页面。
通过回调函数可以解决这个问题。
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相关函数。
使用延迟器的方式也可以,但是会因为用户网络问题出现不可预估的异常。
小程序这种多页面,估计很难处理这种并发的问题。
建议你在请求接口拦截器(使用了flyio之类的都有拦截器)之前校验一下有没有token,如果没有token则去请求登录接口。
https://wendux.github.io/dist/#/doc/flyio/interceptor 这里有flyio的教程