如何向具有 Angular 1.X 背景的人解释 RxJS Subject

How to explain RxJS Subject to someone with Angular 1.X background

根据官方文档,我可以这样使用主题: docs

但是,我发现这是一个相当理论化的解释。

我在 Angular 1.X 方面有很强的背景。

有人可以通过与 Angular 1.X 中的内容进行比较来描述我这个概念 'subject' 吗?

我觉得这个解释很好:

An observable is like an array where the elements arrive delayed in time.

您可以使用 .forEach().map()(以及其他)等运算符。

它也与 Promise 有相似之处,但可以在 subscribe() 上发出 0 个或多个值(类似于 then() 但只调用传递给 then() 的回调一次,而传递给 subscribe() 的回调可以在发射器解析可观察对象之前多次调用。

另见

主题在某种程度上就像信使

一个王国向信使发送消息,通知其盟友其边界遭到袭击。盟友告诉使者,他们将派兵相助。

回到更技术性的语言:

主题是 two-way 个变量。您可以 subscribe 它在它发生变化时接收更新,并通过调用 next 并传递参数来更改变量。

$q.defer() 非常接近。
澄清一下,2 段相同的代码。

//written with $q.defer()
function doWorkAsync() {
   var defer;
   defer = $q.defer();
   getStuff().then(function() {
       defer.resolve('finished here');
   }
   return defer.promise;
}
...
doWorkAsync().then(showResults);


//written with subject()
function doWorkAsync() : Observable<string> {
   let subject$ = new AsyncSubject<string>();

   getStuff().then(function() {
       subject$.next('finished here');
       subject$.complete();
   }
   return subject$;
}
...
doWorkAsync().subscribe(showResults);

总结:

defer.promise ~= observable.
defer.resolve && defer.reject ~= observer.