【发布时间】:2018-09-29 10:18:52
【问题描述】:
我正在查看这个用于 Flutter (dartlang) 的 Firebase API 的演示程序,并查看了原始源代码。我不理解 runTransaction 和 set() 之间的区别以及作者为什么使用其中一个。
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 中的 cmets 是:
对此 Firebase 数据库位置的数据执行乐观并发事务更新。
对于set 方法,cmets 说:
写入的效果将立即可见,并触发相应的事件。也将开始将数据同步到 Firebase 数据库服务器。
有人可以ELI5有什么区别,为什么作者选择两种不同的方法写入数据库?
完整的演示代码是here
【问题讨论】:
标签: firebase firebase-realtime-database dart flutter