收藏
回答

获取用户信息的方法,是放在onLaunch里面调用还是写成一个方法每个页面调用一次呢?

有一个获取用户信息的方法,方法和获取的信息存全局变量,写在app.js里面,现在有两种方式:

  1. 放在onLaunch生命周期内调用,但是和页面onload有时间差,每个页面仍然需要重新掉一个公共方法,拉取数据,这个公共方法还可能会和onLaunch同时执行两次
  2. 不写在onLaunch里面, 每个页面当做一个普通公共方法调用

不知道哪种更好?

回答关注问题邀请回答
收藏

5 个回答

  • 茜茜又困了🐽
    茜茜又困了🐽
    2022-07-21

    用户信息存到全局变量里就好了啊... 为什么会需要在每个页面的onload里重新调用方法去拿用户的信息?

    2022-07-21
    有用 2
    回复 8
    • 小影子是大仙女🎆
      小影子是大仙女🎆
      2022-07-21
      onLaunch onload 是同步执行的,可能页面onload还没有拿到全局变量
      2022-07-21
      回复
    • 茜茜又困了🐽
      茜茜又困了🐽
      2022-07-21回复小影子是大仙女🎆
      可以把赋值全局变量的方法使用promise封装
      在对应页面的onload函数使用async/await 这样获取全局变量
      2022-07-21
      回复
    • 茜茜又困了🐽
      茜茜又困了🐽
      2022-07-21回复小影子是大仙女🎆
      图1是app.js模拟异步的方法,
      图2是async/await的使用
      2022-07-21
      回复
    • Frank
      Frank
      2022-07-21回复茜茜又困了🐽
      这样不是每个页面都要请求一下接口了,不太好
      2022-07-21
      回复
    • 茜茜又困了🐽
      茜茜又困了🐽
      2022-07-21回复Frank
      这个只是模拟,在resolve之前将用户信息赋值给全局变量就好了
      只需要在小程序落地页onload这样写一次,确保是异步执行的,能拿到数据
      2022-07-21
      回复
    查看更多(3)
  • 跨商通
    跨商通
    2022-07-21

    写成一个公共函数,在首页里调用,调用后写到globalData里;

    除了首页,只有进入小程序会第一个打开的页面,比如分享卡片点击打开小程序进入某页面,这样的页面需要单独调用一次获取用户信息,其他页面,肯定比异步时间落后,直接globalData即可。

    2022-07-21
    有用 1
    回复 2
    • 小影子是大仙女🎆
      小影子是大仙女🎆
      2022-07-21
      小程序落地页会判断是否有该全局变量,没有就会重调接口,第一个页面就会和onlaunch的方法同时执行,掉两次,这个能解决吗
      2022-07-21
      回复
    • 跨商通
      跨商通
      2022-07-21回复小影子是大仙女🎆
      onlaunch里不执行。
      2022-07-21
      回复
  • Frank
    Frank
    2022-07-21

    app.js

    let userInfo
    getUserInfo() {
      return new Promise((resolve, reject) => {
          if (userInfo) {
              resolve(userInfo);
          } else {
              // 异步请求
              setTimeout(() => {
                 userInfo = res.data
                 resolve(res.data);
              })
          }
      });
    }
    
    

    其他调用页面:

    getUserInfo().then(res => {
      
    })
    

    不知道这样你能理解不

    2022-07-21
    有用 1
    回复 3
    • 小影子是大仙女🎆
      小影子是大仙女🎆
      2022-07-21
      可以的,有用,谢谢
      2022-07-21
      回复
    • Frank
      Frank
      2022-07-21回复小影子是大仙女🎆
      那就给点个有用吧,😁
      2022-07-21
      回复
    • Anna
      Anna
      2022-10-08
      app.js  getUserInfo方法是在哪个函数里面写呀
      2022-10-08
      回复
  • Api调用师
    Api调用师
    2023-07-07

    当然是放全局比较合适咯,这个问题我专门写了个帖子分析,有完美的解决方案。

    这个库能轻松解决99%的异步和逻辑加载时机问题(异步篇)? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000eae817f8828bf905d767cd5f413

    小程序app.onLaunch与page.onLoad异步问题的最佳实践? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/00002ac57208f0e7335d111f156013

    2023-07-07
    有用 1
    回复
  • 微盟
    微盟
    2022-09-08

    存储到全局gloablData好一些

    2022-09-08
    有用
    回复
登录 后发表内容