uni-app 云函数/云对象返回的变量数据为空
uni-app 云函数/云对象返回的变量数据为空
| 类别 | 信息 |
|---|---|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境 | Windows |
| 操作系统版本号 | 22631.3296 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.08 |
| 工具版本号 | 1.06.2402040win32-x64 |
| 基础库版本号 | 3.3.4 |
| 项目创建方式 | HBuilderX |
操作步骤:
云函数代码如下,返回的“finalData”
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云函数的event和context
event,
context
})
const attendenceSetTable = dbJQL.collection('LongitudeLatitude_list')
const companyTable = dbJQL.collection('company-info')
const departmentTable = dbJQL.collection('opendb-department')
let finalData = {}
console.log("event.cName", event.cName)
await companyTable
.where("full_name =='" + event.cName + "'")
.get()
.then(async res =>{
console.log("companytable的id", res)
let cId = res.data[0]._id;
departmentTable
.where("company_id =='" + cId + "'&& name=='" + event.dName + "'")
.get()
.then(async res1 =>{
let dId = res1.data[0]._id;
//event为客户端上传的参数
attendenceSetTable
.where("company_department =='" + cId + "_" + dId + "'")
.get()
.then(res2 =>{
console.log("company_department", res2.data[0])
finalData = res2.data[0]
console.log("返回数据给客户端", finalData)
})
})
})
//返回数据给客户端
return finalData
};
预期结果:
以下是本地文件调用云函数、返回的地方,预期返回的是对象型数据一组
uniCloud
.callFunction({
name: 'ClockIn-get-location',
data: { cName: this.cName,
dName: this.dName}
})
.then(res => {
console.log("this.setting111的值", res.result)
if (res.result) {
let result = res.result;
console.log("res.result的值", result)
Object.assign(this.setting, result)
console.log("this.setting222的值", this.setting)
}
uni.hideLoading();
});
实际结果:
实际用res.result取到的数据为空
bug描述:
在云函数/云对象中用console.log输出变量值可以看到有值,但是在本地调用云函数的地方用res.result查看返回变量的值就为空了
更多关于uni-app 云函数/云对象返回的变量数据为空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
到现在也没有人回复,是不认可有这个问题吗?
更多关于uni-app 云函数/云对象返回的变量数据为空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
或许是您的异步问题,你尝试下在return finalData上面打印finalData看有无结果
有的,这是我在云函数里输出的日志: 在下方的回复里
您第一张截图再往下一点位置的data有数据吗?
您在注释位置 //返回数据给客户端 打印一下看看
回复 yuhespace: 我今天早上来,在云函数最后一段取数据库数据的代码前加了async和await,结果好了,取到数据了。但我以前好像也加过,搞不清了,反正好了。谢谢您类
回复 4***@qq.com: 没事没事
这是云函数的日志,第二张图是我云函数的日志输出代码

在使用 uni-app 的云函数或云对象时,如果返回的变量数据为空,可能是由于以下几个原因导致的。下面我将逐一分析并提供解决方案:
1. 云函数/云对象未正确返回数据
确保在云函数或云对象中正确返回了数据。例如,在云函数中,使用 return 语句返回数据:
exports.main = async (event, context) => {
const data = { message: "Hello, World!" };
return data; // 确保正确返回数据
};
在云对象中,确保方法返回了数据:
module.exports = {
async getData() {
const data = { message: "Hello, World!" };
return data; // 确保正确返回数据
}
};
2. 云函数/云对象未正确调用
确保在客户端正确调用了云函数或云对象。例如,调用云函数:
uniCloud.callFunction({
name: 'yourFunctionName',
success: (res) => {
console.log(res.result); // 检查返回的数据
},
fail: (err) => {
console.error(err);
}
});
调用云对象:
const cloudObject = uniCloud.importObject('yourObjectName');
cloudObject.getData().then(res => {
console.log(res); // 检查返回的数据
}).catch(err => {
console.error(err);
});
3. 云函数/云对象逻辑错误
检查云函数或云对象中的逻辑,确保没有导致数据为空的条件或错误。例如:
exports.main = async (event, context) => {
let data = null;
if (someCondition) {
data = { message: "Hello, World!" };
}
return data; // 如果 someCondition 为 false,返回的数据将为空
};
确保逻辑正确,避免返回空数据。
4. 权限问题
检查云函数或云对象的权限设置,确保有权限访问相关数据。如果权限不足,可能导致返回的数据为空。
5. 网络问题
检查网络连接,确保客户端能够正常访问云函数或云对象。网络问题可能导致返回的数据为空。
6. 日志调试
使用 console.log 或 uniCloud.logger 在云函数或云对象中添加日志,调试数据是否正确生成和返回。例如:
exports.main = async (event, context) => {
const data = { message: "Hello, World!" };
console.log(data); // 打印日志
return data;
};
7. 云函数/云对象部署问题
确保云函数或云对象已经正确部署到云端。如果没有部署成功,客户端将无法获取数据。
8. 客户端数据处理问题
检查客户端代码,确保正确处理了返回的数据。例如:
uniCloud.callFunction({
name: 'yourFunctionName',
success: (res) => {
if (res.result) {
console.log(res.result); // 处理返回的数据
} else {
console.error("返回的数据为空");
}
},
fail: (err) => {
console.error(err);
}
});

