circular-dependency - 如何在 RxJS 中处理循环依赖的可观察量?

标签 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$,而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/

相关文章:

http - Rxjs 过滤器运算符不适用于 Angular2 Observable

typescript - 为什么命名函数的处理方式与循环依赖中的箭头函数不同?

objective-c - Objective-C - 错误 : 'Expected a type'

ios - 属性更改时可观察不更新列表

Angular2 - 多个组件中的 'watch' 提供程序属性

Angular 2 - 类型 'skipLast' 上不存在属性 'Observable<number>'

javascript - 如何转换 RXJS Observable 中的属性

c++ - 游戏对象互相交谈

C++ 游戏 - 发出父类信号,循环依赖问题

angular - Redux-Observable - 调度必须按顺序运行的多个操作