如何向具有 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.
根据官方文档,我可以这样使用主题: 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.