在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
答案 0 :(得分:0)
我只是看了一眼,看来我们目前可以实现。
首先,“一旦Dart函数开始执行,它将继续执行直到退出。换句话说,Dart函数不能被其他Dart代码中断。”,ref(这是一个很大的 EXCEPT await
关键字,尽管从技术上讲,使用await
已被中断并返回Future
)
其次,查看RxDart source code,add
和setter
都是同步的(没有Future
,没有await
),因此下面的代码很简单,可以保证作为事务工作:
subject.add(subject.value + 2);