【发布时间】:2019-06-02 14:11:24
【问题描述】:
我有一个在文档写入时触发的云功能。云功能需要根据触发器检查多个文档并执行if/else语句。
我创建了一个使用 Promise.all 访问所有文档的函数,但是在尝试访问所有文档信息(如果尚不可用)时出现此错误。
export function onTriggered(change, context) {
const userPrevData = change.before.data();
const userNewData = change.after.data();
const promises = [];
// Get the uid
const uid = context.params.userId;
// User DocRef
const userDoc = firestoreInstance.collection('users').doc(uid).get();
// User Session DocRef
const userSessionDoc = firestoreInstance.collection('sessions').doc(uid).get();
// Solution DocRef
const solutionDoc = firestoreInstance.collection('solution').doc('solutionId').get();
promises.push(userDoc, userSessionDoc, solutionDoc);
return Promise.all(promises).then((snapshots) => {
// Use Promise.all with snapshot.docs.map to combine+return Promise context
return Promise.all(snapshots.map((doc) => {
// At this point, each document and their Ids print to the console.
console.log('docId:::', doc.id);
console.log('docData:::', doc.data());
const solutionDocData = getSolutionDocData(doc);
// This will print as 'undefined' until the correct document data is processed
console.log('solutionDocData:::', solutionDocData);
// This will print as 'undefined' until the correct document data is processed
const clientSeed = doc.get('clientSeed');
// Check to see if the Users' Guess is the same as the solution
if (userNewData.guess.color === solutionDocData.guess.color && userNewData.guess.number === userNewData.guess.number) {
console.log('User solution is correct');
}
}));
})
}
function getSolutionDocData(doc) {
if (doc.id === 'solutionId') { return doc.data(); }
}
如果条件满足,我希望“用户解决方案是正确的”。但是,我收到一个错误,因为数据未定义。
【问题讨论】:
-
getSolutionDocData 将在您向其传递 id 不是“solutionId”的文档时返回 undefined。这里没有足够的信息来理解这是否正确。
-
@DougStevenson 正如您所指出的,我提到过,当信息不可用时,信息是未定义的。但是,问题中有足够的信息。解决方案是将逻辑移至 .then 语句,在该语句中解析每个文档并执行逻辑。
标签: javascript angular firebase google-cloud-firestore google-cloud-functions