哎我真的就很菜 2023-03-11 10:53 采纳率: 50%
浏览 11
已结题

为什么我其他页面获取到的openid还是默认值-1

// app.js
App({
  onLaunch: function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        // env 参数说明:
        //   env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境(第一个创建的环境)
        // env: 'my-env-id',
        traceUser: true,
      });
    }

    this.getOpenId()

    this.globalData = {
      openid: -1
    };
  },
  getOpenId() {
    wx.cloud.callFunction({
      name: 'login',
    }).then(res => {
      console.log(res);
      const openid = res.result.openid
      this.globalData.openid = openid
    })
  }
});
  • 写回答

1条回答 默认 最新

  • 宇 丶 2023-03-11 11:40
    关注

    根据您提供的代码,可能的原因是您在调用getOpenId()方法时,OpenID还没有获取到。wx.cloud.callFunction()是一个异步方法,可能需要一些时间才能返回结果。在获取OpenID之前,globalData中的openid属性被设置为默认值-1。如果在获取OpenID之前尝试访问openid属性,将始终返回默认值-1。

    为了解决这个问题,您可以在获取到OpenID之后再使用它。例如,您可以在getOpenId()方法中将OpenID存储在全局数据中,然后在需要使用OpenID的其他页面或方法中访问全局数据。这样,您可以确保在获取到OpenID之前,不会尝试访问它。

    以下是示例代码,展示了如何将OpenID存储在全局数据中,并在其他方法中访问它:

    // app.js
    App({
      onLaunch: function () {
        // 初始化云开发
        wx.cloud.init({
          // ...
        });
    
        // 获取OpenID并存储在全局数据中
        this.getOpenId();
      },
    
      // 获取OpenID
      getOpenId() {
        wx.cloud.callFunction({
          name: 'login',
        }).then(res => {
          console.log(res);
          const openid = res.result.openid;
          this.globalData.openid = openid; // 存储在全局数据中
        });
      },
    
      // 全局数据
      globalData: {
        openid: null, // 初始值为null,表示OpenID未获取到
      },
    });
    
    
    

    在其他页面或方法中,您可以使用以下代码访问OpenID:

    
    const app = getApp();
    const openid = app.globalData.openid;
    if (openid) {
      // OpenID已获取到,可以使用它进行后续操作
    } else {
      // OpenID未获取到,需要等待获取完成
    }
    
    

    在上面的代码中,我们首先使用getApp()方法获取应用程序实例,然后使用globalData属性访问存储在全局数据中的OpenID。如果OpenID已经获取到,我们可以使用它进行后续操作。否则,我们需要等待获取完成。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加