Поскольку db.runTransaction
является функцией async
, она будет постоянно возвращать Promise
.
Вы можете удалить оператор else
, и метод будет работать так, как ожидается, поскольку runTransaction
вернет Promise<void>
, что является действительным ответом для облачных функций
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;
});