如何处理 RxJS 中循环依赖的可观察对象?
How to handle circularly dependent observables in RxJS?
比方说服务器上某处有一个映射
整数和名称以及网页提供了一个简单的输入,用户可以在其中
可以输入一个数字,并给出相应的名字。
这个问题的基本形式很简单:
const input$ = Rx.Observable.fromEvent(..., "input");
const request$ = input$.map( ... );
const serverResponse$ = request$.flatMap( askServer );
现在我想缓存结果,这样一个请求就可以了
当号码不在缓存中时完成。
const input$ = Rx.Observable.fromEvent(..., "input");
// request$ should now also depend on cache$
const request$ = ???;
const serverResponse$ = request$.flatMap( askServer );
const cache$ = serverResponse$.scan( ... );
但现在 request$
依赖于 cache$
,后者依赖于 serverResponse$
这又取决于 request$
.
如何解决这个问题?
在依赖图中的循环中的某个点引入一个Subject
作为代理,然后将真实Observable(cache$
)的行为镜像到代理Subject(proxyCache$
).
const input$ = Rx.Observable.fromEvent(..., "input");
const proxyCache$ = new Rx.Subject();
const request$ = input$.merge(proxyCache$).map( ... );
const serverResponse$ = request$.flatMap( askServer );
const cache$ = serverResponse$.scan( ... );
cache$.subscribe(proxyCache$);
比方说服务器上某处有一个映射 整数和名称以及网页提供了一个简单的输入,用户可以在其中 可以输入一个数字,并给出相应的名字。
这个问题的基本形式很简单:
const input$ = Rx.Observable.fromEvent(..., "input");
const request$ = input$.map( ... );
const serverResponse$ = request$.flatMap( askServer );
现在我想缓存结果,这样一个请求就可以了 当号码不在缓存中时完成。
const input$ = Rx.Observable.fromEvent(..., "input");
// request$ should now also depend on cache$
const request$ = ???;
const serverResponse$ = request$.flatMap( askServer );
const cache$ = serverResponse$.scan( ... );
但现在 request$
依赖于 cache$
,后者依赖于 serverResponse$
这又取决于 request$
.
如何解决这个问题?
在依赖图中的循环中的某个点引入一个Subject
作为代理,然后将真实Observable(cache$
)的行为镜像到代理Subject(proxyCache$
).
const input$ = Rx.Observable.fromEvent(..., "input");
const proxyCache$ = new Rx.Subject();
const request$ = input$.merge(proxyCache$).map( ... );
const serverResponse$ = request$.flatMap( askServer );
const cache$ = serverResponse$.scan( ... );
cache$.subscribe(proxyCache$);