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

9 回复

到现在也没有人回复,是不认可有这个问题吗?

更多关于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.loguniCloud.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);
    }
});
回到顶部