在普通数组上使用 Observable 的附加价值是什么?

问题描述

我一直在状态层的 Angular 中使用 Observables 来存储应用程序数据并在应用程序的组件之间共享该数据。我们相信,使用 observables,数据会在发生变化时被动地在模板中自我更新,而无需手动检查。

出于好奇,我做了以下演示,看看不使用 Observables 的结果:stackblitz

事实证明,模板通过使用普通数组而不是使用 observable 被动地更新自身。

我想知道,在 angular 应用程序中使用 observable 而不是普通数组来存储/共享数据的附加价值是什么?

解决方法

在什么情况下使用 RxJS Observable

  1. 将多个事件组合在一起
  2. 添加延迟
  3. 客户端速率限制
  4. 协调异步任务
  5. 需要取消时(尽管您可以将 abortController 用于现代 Promise)

他们不适合

  1. 简单的按钮点击
  2. 基本表单使用
  3. Hello world 应用程序

UPD:当您需要对事件流进行细粒度控制(添加延迟或使用像 debounceTime/ThrottleTime 等运算符)时,RxJS 会大放异彩。如果您只想对每个事件应用一些更改(而无法控制流本身),那么响应式方法可能不是最佳选择。 虽然我觉得有必要声明您可以在没有响应式方法的情况下实现相同的逻辑(~控制流),但它会容易出错并且不容易扩展 )。 在您特定的 hello-world 应用程序中,响应式方法不是最佳选择(恕我直言)。如果你想亲眼看看 RxJS 的威力,你可以尝试写一个带有搜索字段的应用程序,应用程序在发送实际请求之前应该等待一段时间(限制请求的数量:他们不应该为每个新字母,请查看 debounceTime 以供参考),并且不应针对相同的输入提出请求(用户输入某些内容,然后改变主意并返回到先前的输入,并且所有这些都在范围内)假设为 600 毫秒。看看 distinctUntilChanges)。 您会发现非 rxjs 替代方案更加详细且难以阅读(更重要的是,规模)。