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,同步$取消所有流......我不明白为什么。
答案 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