gpt4 book ai didi

firebase - runTransaction 和 set() 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 07:14:08 24 4
gpt4 key购买 nike

我正在查看这个用于 Flutter (dartlang) 的 Firebase API 的演示程序,并查看了原始来源。我不是在摸索 runTransactionset() 之间的区别,也不是在摸索作者为什么使用一个而不是另一个。

Future<Null> _increment() async {
// Increment counter in transaction.
final TransactionResult transactionResult =
await _counterRef.runTransaction((MutableData mutableData) async {
mutableData.value = (mutableData.value ?? 0) + 1;
return mutableData;
});

if (transactionResult.committed) {
_messagesRef.push().set(<String, String>{
_kTestKey: '$_kTestValue ${transactionResult.dataSnapshot.value}'
});
} else {
print('Transaction not committed.');
if (transactionResult.error != null) {
print(transactionResult.error.message);
}
}
}

根据源代码中的注释 runTransaction 是:

Performs an optimistic-concurrency transactional update to the data at this Firebase Database location.

对于 set 方法,评论说:

The effect of the write will be visible immediately and the corresponding events will be triggered. Synchronization of the data to the Firebase Database servers will also be started.

有人 ELI5 有什么区别吗?为什么作者选择了两种不同的方法来写入数据库?

完整的演示代码是here

最佳答案

我无法告诉您为什么作者选择其中一个而不是另一个,但是事务和常规写入之间的区别非常明显。

顾名思义,常规写入:它将值写入您指定的位置。

在 Firebase 数据库中,您使用事务根据该位置的当前值将新值写入该位置。所以它结合了读取和写入操作。 Firebase 事务的不同寻常之处在于它们是比较和设置操作。

有关这意味着什么的更多详细信息,我建议阅读以下内容:

该链接还展示了事务与自己读写的不同之处:如果当前值自读取后未被修改,则事务只会执行写入操作。

关于firebase - runTransaction 和 set() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com