我想每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)
实现了相同的功能,但随后每个请求都驻留在不同的文件中,并且很难跟踪。
有没有更好的方法来实现它? 请指导。
由于
答案 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