0

在firebase中,我们可以像这样进行交易

final dataRef = database.reference().child('path/to/data');

dataRef.runTransaction((MutableData transaction) async{
    transaction.value = (transaction.value ?? 0) + 1;
    return transaction;
});

我想知道我们可以对 BehaviorSubject 有同样的看法;像这样的东西

final subject = new BehaviorSubject<int>();

subject.add(1);
subject.add(2);
subject.add(3);
subject.runTransaction((int currentData) => currentData + 2);
// or 
subject.add(subject.value + 2);

subject.stream.listen(print); // prints 7
subject.stream.listen(print); // prints 7
4

1 回答 1

0

我只是看了一下,看来我们目前可以做到这一点。

  1. 首先,“一旦一个 Dart 函数开始执行,它会继续执行直到它退出。换句话说,Dart 函数不能被其他 Dart 代码中断。”,ref(除了,这是一个很大的EXCEPT await关键字,即使在技术上usingawait已经是中断并返回Future)

  2. 其次,查看RxDart 源代码,两者addsetter都是同步的(no Future, no await​​),所以下面的代码很简单,保证可以作为一个事务工作:

subject.add(subject.value + 2);
于 2019-03-14T04:05:52.920 回答