如何从一个有角度的应用程序轮询一组API?

时间:2019-01-23 05:11:41

标签: angular rxjs

我正在尝试从一个有角度的应用程序中轮询一组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
})

在浏览器网络控制台中,我可以看到请求被触发并完成,但是订阅者没有被调用。

是我做这件事的正确方法还是其他方法?

1 个答案:

答案 0 :(得分:0)

经过一番阅读之后,forkJoin不会返回,直到其中的所有可观察对象都完成:https://www.learnrxjs.io/operators/combination/forkjoin.html

由于在这种情况下forkJoin包含计时器,因此我认为它们永远不会完成。

在我将forkJoin替换为combineLatest之后,它开始工作 https://www.learnrxjs.io/operators/combination/combinelatest.html