// 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 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题