rxdart BehaviorSubject交易

时间:2019-03-14 03:43:57

标签: firebase dart flutter reactive-programming bloc

在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

1 个答案:

答案 0 :(得分:0)

我只是看了一眼,看来我们目前可以实现。

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

  2. 其次,查看RxDart source codeaddsetter都是同步的(没有Future,没有await),因此下面的代码很简单,可以保证作为事务工作:

subject.add(subject.value + 2);