让我们说,例如在服务器上的某个地方之间有一个映射 整数和名称以及网页为用户提供了简单的输入 可以输入一个数字并给出相应的名称。
在基本形式中,这个问题很简单:
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$
。
如何解决这个问题?
答案 0 :(得分:4)
在依赖关系图的循环中的某个点引入Subject
作为代理,然后将真实Observable(cache$
)的行为镜像到代理主题(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$);