【发布时间】:2018-12-09 23:17:20
【问题描述】:
我正在尝试在一个路径上设置一些数据,然后在之前的设置操作成功后尝试从另一个路径中删除数据。对于我正在使用 FireStore 事务。以下是代码。
const unapprovedItemRef = admin
.firestore()
.collection("unapproved")
.doc(id);
return admin.firestore().runTransaction(transaction =>
transaction
.get(unapprovedItemRef)
.then(unapprovedItemSnapshot => {
const item = unapprovedItemSnapshot.data();
if (!item) {
throw new Error("No such item");
}
const data = {
added_on: new Date()
};
const dataRef = admin
.firestore()
.collection("data")
.doc('saved');
return transaction.set(dataRef, data);
})
.then(() => transaction.delete(unapprovedRef)) // deliberate error
.then(() =>
res.status(200).send({
message: "Success"
})
)
.catch(err =>
res.status(200).send({
message: "Failed",
error: err.message
})
)
问题是,事务的delete 操作失败(因为我故意在其中引入了一个错误)但set 操作仍然成功,因为它也应该失败,因为它只是逻辑事务的一半。
我在这里做错了什么?
【问题讨论】:
标签: javascript firebase google-cloud-firestore firebase-admin