收藏
回答

关于wx.login调用时机的问题?

在App.onLaunch()函数发起wx.login并且通过后台获取了openid,然后自动加载一些初始数据,保存在wx.env下。当首页onLoad时之前在onLaunch中发起的调用由于时异步执行的,还没完成那么首页中需要访问的wx.env中就没有数据。这个应该通过什么机制来刷新?还是将wx.login放到首页的onLoad中来做?

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

3 个回答

  • 那一抹微笑😊穿透阳光
    那一抹微笑😊穿透阳光
    02-26
    你不晓得在页面的onload中去获取数据啊,为啥要在onLaunch中获取
    
    02-26
    有用
    回复
  • 微盟
    微盟
    02-26

    在你的场景中,由于 `wx.login` 是异步执行的,导致首页的 `onLoad` 在 `wx.login` 调用和数据获取完成之前就已经执行了,从而导致 `wx.env` 中的数据为空。这种情况有几个可能的解决方案:

    使用 Promise 或回调机制确保数据加载完成

       你可以将 `wx.login` 和数据加载过程封装成一个 `Promise`,并在 `Promise` 完成后再加载首页所需的数据。

    // 在 app.js 中
    
       App({
    
         onLaunch() {
    
           this.loginAndLoadData();
    
         },
    
         loginAndLoadData() {
    
           return new Promise((resolve, reject) => {
    
             wx.login({
    
               success: res => {
    
                 // 调用后台接口获取 openid
    
                 wx.request({
    
                   url: 'your-server-api-url', 
    
                   data: { code: res.code },
    
                   success: (response) => {
    
                     // 假设你把数据存储在 wx.env 下
    
                     wx.env = response.data;
    
                     resolve();  // 数据加载完成,resolve
    
                   },
    
                   fail: reject
    
                 });
    
               },
    
               fail: reject
    
             });
    
           });
    
         }
    
       });
    

       然后,在首页的 `onLoad` 中,等待 `loginAndLoadData` 执行完成之后再进行数据访问:

       // 在首页的 onLoad 中

       Page({
    
         onLoad() {
    
           getApp().loginAndLoadData().then(() => {
    
             // 这里可以安全地访问 wx.env
    
             console.log(wx.env);
    
           }).catch(error => {
    
             console.error('数据加载失败', error);
    
           });
    
         }
    
       });
    

       通过 `Promise` 的方式,你可以确保在 `wx.login` 和数据加载完成之后再进行首页的数据加载和渲染。


    02-26
    有用
    回复
  • 智能回答 智能回答 该问答由AI生成
    02-26
    有用
登录 后发表内容