Firebase 函数没有 return 正确的数据

Firebase function does not return the right data

更新

vehicleDocument、employeeDocument 和 routeDocument 是我的 firestore 中的文档引用。我也根据 Renaud 更新了我的代码(添加了对 employee_ID 的查询),但结果仍然相同。

数据模型为:

--- collection: 作业
------ 一些文档
---------- 字符串:employee_ID
----------参考:employee_Document
----------参考:route_Document
----------参考:vehicle_Document
--- collection:员工
------ 一些员工
---------- 字符串:employee_ID

我的 Firebase 函数没有得到我想要的结果,我总是得到这个结果:

{result: tour-found, tourStartTime: null, licensePlate: null, vin: null, waypoints: null, tourcode: null}

来自此代码:

exports.getTourDataFromAssignment = functions.runWith({timeoutSeconds: 15}).region(REGION_ID).https.onCall(async (data, context) => {
    //retrieve uid and get assignmentCollection
    const uid = data.uid.toString();
    var assignmentDocument;
    // eslint-disable-next-line promise/always-return
    const snapshot = await admin.firestore().collection('assignments').where('employee_ID', '==', uid).get();
    if(snapshot.docs.length !== 0) {
        assignmentDocument = snapshot.docs[0];
    }else{
        return {
            'result': 'no-tour-found',
        };
    }

    //loop over assignment, find employeeDocument, get check for identical employeeID
    async function getDocumentsFromAssignment() {
        const vehicleDocument = await assignmentDocument.data()['vehicle_Document'].get();
        const routeDocument = await assignmentDocument.data()['route_Document'].get();
        return [routeDocument, vehicleDocument];
    }

    const result = await getDocumentsFromAssignment();
    const routeDocument = result[0];
    const vehicleDocument = result[1];
    return {
            'result': 'tour-found',
            'waypoints': routeDocument["waypoints"],
            'licensePlate': vehicleDocument["licensePlate"],
            'vin': vehicleDocument["vin"],
            'tourcode': routeDocument["tourcode"],
            'tourStartTime': routeDocument["tour_start_time"],
    };

我可以保证请求中的 uid 等于我的 firestore 中的 uid。这意味着我能够获得 'inside' 和 if-statement,但无论如何它仍然 returns 为空。

这与在getDocumentsFromAssignment函数中获取文档有关。当你 get 这个 reference it returns DocumentSnapshot on which you had to still call data() again (reference)。我认为对此有很多可能的更正,但是对我来说最简单的是在 return 中添加 .data() 方法,例如:

async function getDocumentsFromAssignment() {
        const vehicleDocument = await assignmentDocument.data()['vehicle_Document'].get();
        const routeDocument = await assignmentDocument.data()['route_Document'].get();
        return [routeDocument.data(), vehicleDocument.data()];
    }

我在 node12 上本地测试过它,所以它应该也可以在 Cloud Function 中运行。