【发布时间】:2019-05-06 14:28:59
【问题描述】:
我正在尝试从内部传递交易
db.runTransaction((transaction)=>{...
块到导出到外部 .ts 文件(比如 functions.ts)中的函数。目的是使这个外部函数成为在我的其他 .js 文件之一中启动的事务计算的一部分,比如说 MyScreen.js。
因此,在事务之前,导出的函数如下所示:
static async updateDoc(ref) {
return await ref.update("field", firebase.firestore.FieldValue.increment(1));
}
交易通过后是这样的:
static async updateDoc(ref,transaction) {
return await transaction.update(ref,"field", firebase.firestore.FieldValue.increment(1));
}
我会在 MyScreen.js 文件中导入这个 functions.ts,然后像这样调用函数:
Functions.updateDoc(my_ref,transaction);
我已经进行了此更改,并且代码似乎可以正常工作。但是我怎么能确定这个外部函数现在实际上是原始事务的一部分呢?它的工作是否足以确保它现在实际上是该交易的一部分?有没有办法检查这个?
【问题讨论】:
-
part of the transaction是什么意思?除非您在 catch 块中手动执行此操作,否则它不会自动回滚 -
我的意思是,如果我将事务作为参数传递给的外部函数中发生错误,它们以及在此上下文中执行的原始文档 MyScreen.js 中的函数相同的事务全部回滚,反之亦然?他们现在是否都在同一个事务的上下文中。
-
您在这里误解了事务参数。它只是数据库事务 api,它与任何其他上下文无关。如果您需要回滚数据库事务,您应该手动调用回滚方法,如果这样做,它不会回滚代码所做的任何其他更改,而是数据库更改。
-
感谢您的回复,但我认为您在这里误解了我的问题。当然,我说的是数据库更改...无论如何...谢谢您的回复..
-
正如我所说,您应该尝试{ await,, await, await} catch(transaction.rollback) 并将事务参数移至外部范围。
标签: react-native google-cloud-firestore