runTransaction和set()之间的区别 [英] Difference between runTransaction and set()

查看:71
本文介绍了runTransaction和set()之间的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在查看原始资源之后,我正在看这个用于Flutter的Firebase API的演示程序(达特朗).我并没有想过 runTransaction set()之间的区别以及作者为什么一个使用另一个.

I am looking at this demo program for Firebase API for Flutter (dartlang) and after looking at the original source. I am not grokking the difference between runTransaction and set() and why the authors used one over the other.

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 中的注释为:

对该Firebase数据库位置的数据执行乐观并发事务更新.

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

对于 set 方法,注释应为:

写入的效果将立即可见,并且将触发相应的事件.数据到Firebase数据库服务器的同步也将开始.

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有什么区别吗?为什么作者选择两种不同的方法写入数据库?

Can someone ELI5 what is the difference and why the authors chose two different methods to write to the db?

完整的演示代码位于此处

推荐答案

我无法告诉您为什么作者选择了另一个,但是事务和常规写入之间的区别是很明显的.

I can't tell you why the authors picked one over the other, but the difference between a transaction and a regular write is quite clear.

常规写入正是该名称所隐含的含义:它将值写入您指定的位置.

A regular write is precisely what the name implies: it writes the value to the location that you specify.

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

In the Firebase Database you use a transaction to write a new value to a location, based on the current value in that location. So it combines a read and a write operation. What's somewhat unusual about Firebase transactions is that they are compare-and-set operations.

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

For more details on what that means, I recommend reading these:

该链接还显示了事务与您自己读取和写入事务有何不同:如果事务自读取以来未修改当前值,则事务将仅执行写入操作.

That link also shows how a transaction is different from reading and writing it yourself: a transaction will only perform the write operation if the current value was not modified since it was read.

这篇关于runTransaction和set()之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆