小程序onLaunch执行延迟,导致页面onLoad先执行问题

448次阅读
没有评论

共计 750 个字符,预计需要花费 2 分钟才能阅读完成。

通常,在 app.js 放置一些初始化的登录检测等方法,但是由于 app.js 和 pages 的方法异步执行,如果 app.js 的 onLaunch 执行时间过长,执行未结束时候,页面的 onLoad 已经开始执行,导致 onload 当中无法获取到初始化的一些参数,进而引起首页打开失败,数据加载错误。

网络上其他朋友分享过很多办法,比如增加一个回调函数,或者引入 promise,或者进行 relaunch 等方法,这里我们再提供一个改动较小的办法,就是使用 setInterval 进行循环监听,下方是案例代码:

该方法的一个好处是无需对原来的 app.js 做任何修改,只需要对 pages 的调用进行一个包裹即可:

onLoad:function(){
        var that = this
        // 假设 app.js 会在缓存中写入 token 值,这里先判断是否已经写入
        if (!wx.getStorageSync('token')) {
        // 如果未写入,则进行一个循环监听等待
            var trynum = 1;
            var watchtoken = setInterval(function () {console.log('第'+trynum+'尝试')
                    if (wx.getStorageSync('token')) {clearInterval(watchtoken)
                        that.getData();}
                    // 超时报错,避免资源长期占用,超时自动停止监听,并弹出错误提醒
                    if (trynum>= 20) {wx.hideLoading()
                        wx.showModal({
                          title: '出错了',
                          content: '系统加载失败, 请联系客服',
                        })
                        clearInterval(watchtoken)
                    }
                    trynum += 1;

                }, 500);
        } else {
            // 如果已经写入了,直接后续操作
            that.getData();}
}

正文完
加入官方交流QQ群:778957856
post-qrcode
 
clark
版权声明:本站原创文章,由 clark 2022-09-04发表,共计750字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)