首页 > 编程语言 >小程序 app.js中登录获取token还未结束时 首页请求过快报未登录

小程序 app.js中登录获取token还未结束时 首页请求过快报未登录

时间:2023-02-22 19:45:55浏览次数:51  
标签:user const 登录 app globalData token userInfo js 页面

场景:

在小程序中大家应该都有这样的场景,在onLaunch里用wx.login静默登录拿到code,再用code去发送请求获取token、用户信息等,整个过程都是异步的,然后我们在业务页面里onLoad去用的时候异步请求还没回来,导致没拿到想要的数据,以往要么监听是否拿到,要么自己封装一套回调,总之都挺麻烦,每个页面都要写一堆无关当前页面的逻辑。

直接上终极解决方案,公司内部已接入两年很稳定:

1.可完美解决异步问题

2.不污染原生生命周期,与onLoad等钩子共存

3.使用方便

4.可灵活定制异步钩子

5.采用监听模式实现,接入无需修改以前代码

6.支持各种小程序和vue架构

。。。

//为了简洁明了的展示使用场景,以下有部分是伪代码,请勿直接粘贴使用,具体使用代码看Github文档
//app.js
//globalData提出来声明
let globalData = {
  // 是否已拿到token
  token: '',
  // 用户信息
  userInfo: {
    userId: '',
    head: ''
  }
}
//注册自定义钩子
import CustomHook from 'spa-custom-hooks';
CustomHook.install({
 'Login':{
    name:'Login',
    watchKey: 'token',
    onUpdate(token){
      //有token则触发此钩子
      return !!token;
    }
  },
 'User':{
    name:'User',
    watchKey: 'userInfo',
    onUpdate(user){
      //获取到userinfo里的userId则触发此钩子
      return !!user.userId;
    }
  }
}, globalData)
// 正常走初始化逻辑
App({
  globalData,
  onLaunch() {
      //发起异步登录拿token
      login((token)=>{
          this.globalData.token = token
          //使用token拿用户信息
          getUser((user)=>{
             this.globalData.user = user
          })
     })
   }
})
//关键点来了
//Page.js,业务页面使用
Page({
  onl oadLogin() {
       //拿到token啦,可以使用token发起请求了
       const token = getApp().globalData.token
    },

  onl oadUser() {
       //拿到用户信息啦
       const userInfo = getApp().globalData.userInfo
    },

  onReadyUser() {
       //页面初次渲染完毕 && 拿到用户信息,可以把头像渲染在canvas上面啦
       const userInfo = getApp().globalData.userInfo
       // 获取canvas上下文
       const ctx = getCanvasContext2d()
       ctx.drawImage(userInfo.head,0,0,100,100)
    },

  onShowUser() {
       //页面每次显示 && 拿到用户信息,我要在页面每次显示的时候根据userInfo走不同的逻辑
       const userInfo = getApp().globalData.userInfo
       switch(userInfo.sex){
         case 0:
           // 走女生逻辑
           break
         case 1:
           // 走男生逻辑
           break
       }
    }
})

转载自 https://developers.weixin.qq.com/community/develop/article/doc/00002ac57208f0e7335d111f156013

标签:user,const,登录,app,globalData,token,userInfo,js,页面
From: https://www.cnblogs.com/wang-xx/p/17145620.html

相关文章

  • tensorflow.js 对视频 / 直播人脸检测和特征点收集
    前言:    这里要介绍的是Tensorflow.js官方提供的两个人脸检测模型,分别是face-detection和face-landmarks-detection。他们不但可以对视频中的人间进行精确定......
  • 完善登录功能
    用户不登录不能访问系统其它页面,否则跳转到登录页面。使用拦截器或过滤器,在拦截器或过滤器中判断用户是否已经完成登录,如果没有登录则跳转到登录页面。(1)创建自定义过滤器......
  • tensorflow.js 多分类,机器学习区分企鹅种类
    前言:    在规则编码中,我们常常会遇到需要通过多种区间判断某种物品分类。比如二手物品的定价,尽管不是新品没有SKU但是基本的参数是少不了。想通过成色来区分某......
  • tensorflow.js 视频图片多目标检测
    前言:    Tensorflow.js官方提供了很多常用模型库,涵盖了平时开发中大部分场景的模型。例如,前面提到的图片识别,除此之外还有人体姿态识别,目标物体识别,语音文字等识......
  • #yyds干货盘点 react笔记之学习之使用create-react-app创建文件
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • 2018最新苹果APP上架App Store流程(超详细)
    上架iOS需要一个付费688的开发者账号,还没有的话申请一个或者借用。申请苹果开发者账号教程上架AppStore之前是先安装到苹果手机测试调试好,app能正常运行再上架iOS真机调......
  • C# json数组排序-根据指定key排序-jsonArray
    //jsonArray.ToJson()是json数组根据指定treatment_no来进行排序json字符串[{"treatment_type":"1","treatment_no":"42",},{"treatment_type":......
  • Burp Suite+captcha-killer-modified,爆破带有验证码Web登录接口(保姆级教程)
    目录1需求描述2测试环境要求3配置测试环境3.1安装ddddocr+aiohttp3.2BurpSuite添加插件3.3启动图像识别接口4实战测试4.1获取验证码接口4.2获取请求包4.3插件配......
  • appium遇到的问题
    问题1:java.lang.SecurityException:InjectingtoanotherapplicationrequiresINJECT_EVENTSpermissionhttps://blog.csdn.net/qq_38112817/article/details/8486092......
  • js: ElementUI表单验证validate和validateField
    文档回顾1、validate:对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则......