【问题标题】:rxdart BehaviorSubject transactionrxdart BehaviorSubject 事务
【发布时间】:2019-08-04 21:11:53
【问题描述】:

在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

【问题讨论】:

    标签: firebase dart flutter reactive-programming bloc


    【解决方案1】:

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

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

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

    subject.add(subject.value + 2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2022-06-15
      • 1970-01-01
      • 2019-08-31
      • 2019-04-14
      • 2020-09-29
      相关资源
      最近更新 更多