条件RxJS流

时间:2017-11-06 11:06:42

标签: angular typescript rxjs

resource1$ = hash1$.map( (renew: boolean) => renew ? http1$ : Observable.empty() );
resource2$ = hash2$.map( (renew: boolean) => renew ? http2$ : Observable.empty() );

sync$ = Observable.forkJoin(resource1$, resource2$);

sync$.subscribe( () => console.log('Sync done!), (err) => console.log('Sync failed!') );

您好, 我的应用程序启动时,我有多个资源可以从API同步。 我希望并行同步它们并检查是否需要使用HEAD请求同步它们并将X-HASH标头与旧存储进行比较。

所以hash1 $做一个HEAD请求,比较哈希并返回true或false。

我被卡住了,因为,如果resource1 $返回Observable.empty,同步$取消所有流......我不明白为什么。

1 个答案:

答案 0 :(得分:2)

forkJoin要求所有源Observable发出至少一个项目并完成。如果您使用Observable.empty(),则只会发送complete通知,这就是forkJoin永不发出的原因。

你可以这样做:

resource1$ = hash1$.map((renew: boolean) => renew ? http1$ : Observable.of(false));
resource2$ = hash2$.map((renew: boolean) => renew ? http2$ : Observable.of(false));

sync$ = Observable.forkJoin(resource1$, resource2$)
  .filter(results => results[0] && results[1]); // Or whatever condition you want