我正在尝试从一个有角度的应用程序中轮询一组API。
这是我的代码:
// service
subscribeToData(response: any): Observable<any> {
const requests = [];
response.forEach(item => {
requests.push(this.startPolling(item.href).pipe(catchError(err => of('error'))));
});
return forkJoin(requests);
}
private startPolling(api: string): Observable<any> {
return timer(0, 1000)
.switchMap(() => this.httpClient.get(api));
}
// component
this.service.subscribeToData(response).subscribe(data => {
// do something
})
在浏览器网络控制台中,我可以看到请求被触发并完成,但是订阅者没有被调用。
是我做这件事的正确方法还是其他方法?
答案 0 :(得分:0)
经过一番阅读之后,forkJoin
不会返回,直到其中的所有可观察对象都完成:https://www.learnrxjs.io/operators/combination/forkjoin.html
由于在这种情况下forkJoin
包含计时器,因此我认为它们永远不会完成。
在我将forkJoin
替换为combineLatest
之后,它开始工作
https://www.learnrxjs.io/operators/combination/combinelatest.html