为了账号安全,请及时绑定邮箱和手机立即绑定

有大佬遇到过这个问题吗:请教微信小程序维护登录态怎么使用Promise改写?万分感谢

有大佬遇到过这个问题吗:请教微信小程序维护登录态怎么使用Promise改写?万分感谢

慕田峪4524236 2019-08-06 00:13:38
业务需求是,维护登录态的代码写在app.js里的,获取到登录态后保存到globaldata里,子页面的请求接口都需要携带登录态,直接拿globaldata里的登录态就可以。遇到的问题是,经常子页面比如index页面里的代码在app.js执行完毕前就执行,就拿不到globaldata里的登录态。我的思路是能不能把app.js里维护登录态的代码用Promise改写一下,然后把Promise实例放到globaldata里,子页面比如index页面取globaldata的Promise实例等待状态变为resolve时就可以拿到登录态然后再请求接口了。下面是我回调函数方式维护登录态的大体流程:请教大佬怎么改写呢?wx.getStorage({//Storage里取登录态key:'loginState',success(res){//登录态存在wx.checkSession({success(){//session_key未过期},fail(){//session_key已经失效,需要重新执行登录流程wx.login({success(val){wx.request({url:'https://test.com/onLogin',data:{code:val.code},success(data){this.globalData.uid=data.uid;//将后端返回的登录态uid保存到globalData方便子页面使用}})}})//重新登录}})},fail(){wx.login()//登录态不存在,重新登录}})
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

当然是可以的,不过不一定非要用globalData,实际上整个app实例都可以访问,而且是个普通对象,所以你可以把这个Promise直接放在app的任何位置,比如:
//app.js
App({
loginPromise:null,
onLaunch(){
//假设在`checkSession`里,你
//1.验证用户登录状态
//2.获取用户信息
//3.并且把数据放到该放的地方
this.loginPromise=checkSession();
},
});
//pages/index/index.js
constapp=getApp();
Page({
onLoad(){
//其它的初始化动作
//使用app里的promise
app.loginPromise
.then(user=>{
//处理用户身份
//处理完成之后,然后启动
this.doStart();
});
},
doStart(){
//启动函数
},
});
写完答案我又看了眼你的问题,你知道怎么写Promise吧?
                            
查看完整回答
反对 回复 2019-08-06
  • 2 回答
  • 0 关注
  • 393 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号