Dart Streams API(带有rxdart)与其他反应式库(例如RxJava和RxJS)之间的主要区别是什么?

时间:2018-06-29 07:33:19

标签: stream dart flutter reactive-programming

现在,我正在尝试将现有的响应式Angular应用程序(基于RxJS)的逻辑移植到Flutter。我在使用dart stream API时遇到很多问题,该API的行为似乎与其他Rx实现完全不同。

以下方面的主要区别是什么

  • 错误和完成事件
  • null / void值处理
  • 流可重用性
  • 多播(publishrefcountshareReplay
  • 订阅管理

1 个答案:

答案 0 :(得分:1)

来自Rx Observables vs Dart Streams

在许多情况下,流和可观察对象的工作方式相同。但是,如果您习惯使用标准的Rx Observable,则Stream API的某些功能可能会让您感到惊讶。我们提供了下表,以帮助人们了解差异。

有关以下情况的其他信息,请阅读Rx class documentation

┌────────────────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────┐
│                 Situation                  │                                                   Rx Observables                                                    │             Dart Streams              │
├────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────┤
│ An error is raised                         │ Observable Terminates with Error                                                                                    │ Error is emitted and Stream continues │
│ Cold Observables                           │ Multiple subscribers can listen to the same cold Observable, each subscription will receive a unique Stream of data │ Single subscriber only                │
│ Hot Observables                            │ Yes                                                                                                                 │ Yes, known as Broadcast Streams       │
│ Is {Publish, Behavior, Replay}Subject hot? │ Yes                                                                                                                 │ Yes                                   │
│ Single/Maybe/Complete ?                    │ Yes                                                                                                                 │ No, uses Dart Future                  │
│ Support back pressure                      │ Yes                                                                                                                 │ Yes                                   │
│ Can emit null?                             │ Yes, except RxJava                                                                                                  │ Yes                                   │
│ Sync by default                            │ Yes                                                                                                                 │ No                                    │
│ Can pause/resume a subscription*?          │ No                                                                                                                  │ Yes                                   │
└────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────┘