При рассмотрении примеров кода для .runTransaction()
кажется, что он возвращает обещание и распространяет отклонения обещания из своего обратного вызова (это немного другой интерфейс для простого обратного вызова), но в любом случае это выглядит например, вам просто нужно вернуть обещание из firestoreDB.runTransaction()
из вашего deleteItem()
метода, а затем убедиться, что вызывающий этот метод использует .catch()
для обработки любых ошибок.
async deleteItem(id: string): Promise<void> {
const ref = firestoreDB.collection("items").doc(id);
// add return here
return firestoreDB
.runTransaction(async (transaction: FirebaseFirestore.Transaction) => {
let doc = await transaction.get(ref);
if (doc.exists) {
transaction.delete(ref);
} else {
throw new NotFoundException();
}
})
.catch((err) => {
if (err instanceof NotFoundException) {
throw err;
} else {
throw new HttpException(
"Something went wrong",
HttpStatus.INTERNAL_SERVER_ERROR
);
}
});
}
Затем, где бы вы ни звоните .deleteItem()
:
obj.deleteItem(...).catch(err => {
// handle error here
});