我们通常会遇到这样的问题:页面加载完成之后,接口请求的数据才请求回来,此时页面已经渲染完成了,所以,数据请求回来的太晚,就不会被渲染到页面上。
所以这个问题的另外一种的表示就是:如何在 onLaunch 获取到后端数据之后再执行 onLoad
我们以一个具体的案例来说明这个问题:
当我们进入到一个企业内部的小程序的时候,小程序会获取到登录者在企业中的个人信息,当拿到用户的 token 以后,会将 token 存到本地,然后才会进入到小程序的首页,通过携带 token 去请求首页用到的信息并展示。
所以理想状态是这样的:
1、点击小程序,进入到 app.js 中的 onLaunch
2、通过钉钉的免登录或者发送 ajax 请求获取到登录者的 token 并存储到本地
3、进入到首页 index.js 中的 onLoad
4、从本地获取 token ,携带 token 调用首页需要用到的信息进行展示
可残酷的现实是这样的:
1、点击小程序,进入到 app.js 中的 onLaunch
2、通过钉钉的免登录或者发送 ajax 请求获取到登录者的 token 并存储到本地,可是因为 app.js 加载速度要比 index.js 慢,所以请求一直在发送中.....
3、进入到首页 index.js 中的 onLoad
4、从本地获取 token (因为请求还在发送中,所以此时本地还没有 token)
5、携带 token 调用首页需要用到的信息进行展示(此时页面已经展示完成了,才刚刚获取到请求回来的 token,请求回来的信息根本就渲染不到页面上)
解决方法:利用回调
app.js
index.js
注意:这里一定要单独写一个方法,然后在 onLoad 里面调用,不然不起效果
这篇文章就到这里了,整体的思路来自于这篇博客,大致就是这种思想,不过具体的代码会有出入,感兴趣的小伙伴可以去看看 60岁老猿:微信小程序 如何等待onLaunch拿到后端数据后,再执行onLoad