官方请进---微信小程序生命周期管理
发布于 5 年前 作者 lihou 16729 次浏览 来自 问答

现象描述:微信小程序转发时,用户第一次进入小程序,转发页面用户信息处理异常

具体描述:使用wepy开发微信小程序时,在app的onLaunch()中使用async/await处理用户注册功能,比如(用户第一次登陆时,获取openId,在开发者服务器中处理用户信息–创建、更新等操作),app的onLaunch()中的方法还未处理完成,就开始处理转发页面onLoad()\onShow()就开始执行。转发页面onLoad()\onShow()需要用到用户的信息。没有获取到,就出了异常

问题:如何才能使app的onLaunch的处理用户信息的方法执行完成,再进行转发页面的onLoad()\onShow()

4 回复

小程序这种多页面,估计很难处理这种并发的问题。

建议你在请求接口拦截器(使用了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相关函数。

使用延迟器的方式也可以,但是会因为用户网络问题出现不可预估的异常。

增加一个开屏页,在开屏页里请求完成后携带参数跳转指定页面。

回到顶部