使用observable在1分钟后重复请求

时间:2018-01-11 06:48:41

标签: javascript angular rxjs observable

我想每1分钟后从5个API加载数据来刷新页面。 要发送请求并将所有数据放在一起,我会使用 Observable.forkJoin 并在每次将其放入setInterval时重复它。

如下所示。

setInterval(function () {
            console.log("INSIDE SET INTERVAL")
            return Observable.forkJoin(
                self.http.get(url1, { headers: headers, method: 'GET' }).map((res: Response) => res.json()),
                self.http.get(url2, { headers: headers, method: 'GET' }).map((res: Response) => res.json()),
                self.http.get(url3, { headers: headers, method: 'GET' }).map((res: Response) => res.json()),
                self.http.get(url4, { headers: headers, method: 'GET' }).map((res: Response) => res.json()),
                self.http.get(url5, { headers: headers, method: 'GET' }).map((res: Response) => res.json()),
            );   
        }, 60000); 

但是当我尝试订阅此功能时,它说

  

'void'类型中不存在属性'subscribe'。

我使用Observable.timer(60000)实现了相同的功能,但随后每个请求都驻留在不同的文件中,并且很难跟踪。

有没有更好的方法来实现它? 请指导。

由于

1 个答案:

答案 0 :(得分:3)

有更好的方法可以做到这一点,

您应该使用setInterval

而不是Observable.interval
let url = 'https://jsonplaceholder.typicode.com/users/';

let response = Observable.interval(60000).switchMap(() =>
                    Observable.forkJoin(
                        this.http.get(`${url}1`).map((res: Response) => res.json()),
                        this.http.get(`${url}2`).map((res: Response) => res.json())
                    )   
                );

response.subscribe(([data1, data2]) => {
    // your code
});

WORKING DEMO (您可以查看控制台日志)

我认为,您可以直接从setInterval返回价值,就像您在代码中使用的那样more read