微信小程序 app.js和首页请求先后问题解决

今天菜鸟又发现了这个 app.js 和 首页请求先后的问题,但是不同的是,现在菜鸟变强了!

本来菜鸟是想补充以前写的这个问题的博客的,结果一看,发现之前写的是什么狗屎,所以直接删除了,重新写!

问题描述:

微信小程序需要在 app.js 里面去进行用户静默登录等操作,然后首页又需要根据后台返回的用户信息进行请求,那么这个时候问题就来了,可能首页的请求先于 app.js ,那么就会因为获取不到用户信息而报错!

解决办法一 定时器

解决思路:

用一个100ms的定时器去重复确认是否有用户信息,没有就继续确认,有了就清除定时器并进行请求

代码:

this.data.timer = setInterval(() => {
  if(app.globalData.userInfo?.id) {
    clearInterval(this.data.timer);
    wx.request({
      url:"xxxxx",
      method:"POST",
      data: {
        userId: app.globalData.userInfo.id,
        orgId: app.globalData.orgId,
      }
    }).then( res => {
        if(res.status == 200){
	      console.log(res);
	    } else {
	      wx.showToast({
	        title: res.msg,
	        icon: 'error',
	        duration: 2000,
	        mask:true
	      })
	    }
    }).catch( err => {
      console.log(err);
    })
  }
}, 100)

注意:
1、这里还有一个变化的,就是设置一个变量,只有请求到了用户信息,再赋值为 true ,首页还是循环去判断这个变量,其实一样的!
2、记得 onHide 的时候也要清除定时器!

解决办法二 官方

解决思路:

通过 app.js 直接去调取首页的请求!具体思路就是,如果首页能获取到用户id,就直接在首页进行请求,如果获取不到,就通 app.方法名 给app里面的方法赋值成为请求,然后在登录接口的 then 中调用该方法!

代码:
app.js

wx.login({
  success: res => {
    let data = {
      jsCode: res.code,
      appId: getApp().globalData.appId,
    }
    wx.request({
        url: 'xxxxx',
        data: data,
      })
      .then(result => {
        if (result.status == 200) {
          getApp().globalData.userInfo = res.obj
		  this.pageFun(); // 首页方法
        } else {
          wx.showToast({
            title: result.msg
          })
        }
      })
  }
})

首页.js

if(app.globalData.userInfo?.id) {
  wx.request({
    url:"xxxxx",
    method:"POST",
    data: {
      userId: app.globalData.userInfo.id,
      orgId: app.globalData.orgId,
    }
  }).then( res => {
    if(res.status == 200){
      console.log(res);
    } else {
      wx.showToast({
        title: res.msg,
        icon: 'error',
        duration: 2000,
        mask:true
      })
    }
  }).catch( err => {
    console.log(err);
  })
} else {
	app.pageFun = wx.request({
	    url:"xxxxx",
	    method:"POST",
	    data: {
	      userId: app.globalData.userInfo.id,
	      orgId: app.globalData.orgId,
	    }
	  }).then( res => {
	    if(res.status == 200){
	      console.log(res);
	    } else {
	      wx.showToast({
	        title: res.msg,
	        icon: 'error',
	        duration: 2000,
	        mask:true
	      })
	    }
	  }).catch( err => {
	    console.log(err);
	  })
}

注意

菜鸟暂时只知道这两种方法,后面有别的再来补充,这里第二种我没有写代码,现场搞的,可能有点问题,但是知道思路,相信读者不用看我的就可以自己写出来!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PBitW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值