如何在RxJS中处理循环相关的可观测量?

时间:2015-12-17 20:43:29

标签: circular-dependency observable 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$

如何解决这个问题?

1 个答案:

答案 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$);