// 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
})
}
});
根据您提供的代码,可能的原因是您在调用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已经获取到,我们可以使用它进行后续操作。否则,我们需要等待获取完成。