export const updateDataWhenUserUnattendTheEvent = functions.firestore
.document('events/{eventId}/Attendee/{userId}')
.onDelete((snap, context) => {
const eventID = context.params.eventId
const eventRef = snap.ref.firestore.collection('events').doc(eventID)
const db = admin.firestore()
return db.runTransaction(async t => {
const doc = await t.get(eventRef)
if (doc) {
const eventRankPoint = doc.data().rankPoint
let eventCapacity = doc.data().capacity
return t.update(eventRef,{
isFullCapacity : false,
capacity : eventCapacity + 1,
rankPoint: eventRankPoint - 1
})
} else {
// what should I write in here? empty promise?
return new Promise()
}
})
})
我希望仅当文档存在时我的功能才能工作。所以我该怎么做 ?我写了新的Promise,但是....我实际上不知道该怎么办。预先感谢
答案 0 :(得分:2)
如果在函数的某些代码路径中没有异步工作要执行,则只需返回null
。仅当它跟踪某些异步工作时,您才真正需要一个诺言。
或者,您可以返回可以立即用Promise.resolve(null)
解决的诺言
答案 1 :(得分:0)
由于db.runTransaction
是async
函数,它将始终返回Promise
。
您可以删除else
语句,该方法将按预期执行,因为runTransaction
将返回Promise<void>
,这是对Cloud Functions的有效响应
export const updateDataWhenUserUnattendTheEvent = functions.firestore
.document('events/{eventId}/Attendee/{userId}')
.onDelete((snap, context) => {
const eventID = context.params.eventId;
const eventRef = snap.ref.firestore.collection('events').doc(eventID);
const db = admin.firestore();
return db.runTransaction(async t => {
const doc = await t.get(eventRef);
if (doc) {
const eventRankPoint = doc.data().rankPoint;
let eventCapacity = doc.data().capacity ;
return t.update(eventRef,{
isFullCapacity : false,
capacity : eventCapacity + 1,
rankPoint: eventRankPoint - 1
});
}
});
});
您还可以创建onDelete
函数async
,这意味着您可以强制其始终返回Promise
-以下内容有效,并且将正确退出该函数。
export const updateDataWhenUserUnattendTheEvent = functions.firestore
.document('events/{eventId}/Attendee/{userId}')
.onDelete(async (snap, context) => {
// Do Nothing
return;
});