比方说服务器上的某个地方之间存在映射 整数和名称以及网页提供了简单的输入,用户可以在其中输入 可以输入一个数字并给出相应的名称。
从基本形式来看,这个问题很简单:
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$
,而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$);
关于circular-dependency - 如何在 RxJS 中处理循环依赖的可观察量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343869/