现在,我正在尝试将现有的响应式Angular应用程序(基于RxJS)的逻辑移植到Flutter。我在使用dart stream API时遇到很多问题,该API的行为似乎与其他Rx实现完全不同。
以下方面的主要区别是什么
null
/ void
值处理publish
,refcount
,shareReplay
)?
答案 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 │
└────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────┘