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 中运行。
更新
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 中运行。