// 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
})
}
});
为什么我其他页面获取到的openid还是默认值-1
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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已经获取到,我们可以使用它进行后续操作。否则,我们需要等待获取完成。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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 云桌面水印如何添加