RxJS & Angular 6 - observables, subjects 和基本的数组获取和添加操作

RxJS & Angular 6 - observables, subjects and basic get and add operations on arrays

我正在努力思考 observables/observers/subjects 和 angular。我浏览了许多涵盖可观察基础知识的教程,基本订阅场景很有意义。然而,这些教程似乎没有涵盖 adding 到可观察的集合。他们中的大多数人似乎也专注于使用 HttpClient,而我试图在不依赖 Web 服务的情况下模拟一些数据——只是用于测试的基本内存对象数组。

我创建了一个简单的应用程序来展示我的困惑。

组件 1 和服务 1 展示了获取数字集合和添加新数字的基本不可观察方式。组件 2 和服务 2 展示了一种获取数据和由于订阅而自动获取更新的可观察方式。我正在使用 Subject 来做到这一点。

https://github.com/rpasechnikov/observable-test-app

谁能指出我是在正确的道路上还是完全误解了可观察到的模式?我需要在这里使用 Subject 还是应该坚持使用 Observables?如果是这样 - 我如何从中提出 next() 通知?最重要的是,有没有人知道为什么第一个 this.subject.next() 不触发更新,而进一步的调用会触发更新?

非常感谢!!

使用 Observables 的概念很容易被误解,因为要同时查看很多东西!!!

但是您不必惊慌,因为它们并没有您想象的那么糟糕。

您使用的是一种特殊类型的 Observable,它既是 Observer 又是 Observablemulticasting.

Observer:当你想通过next

更新可观察流时,你使用我

Observable:当你想通过subscribe

从可观察流中获取值时,你可以使用我

Ben Lesh gave a talk on Subjects

在您的情况下 (Service 2 on your github),您使用的是 Subject。这意味着如果我在通过 next 更新我的流之前没有观察者(有人订阅了我),那么那个人将不会获得该值。

你可以试试用BehaviorSubject。主要区别是

  1. 我必须有一个初始值
  2. 每当有人订阅我时,他们将始终获得最新值,无论是在我更新之前还是之后。

试试吧!

希望对您有所帮助