【问题标题】:repeat request after 1 minute using observable1 分钟后使用 observable 重复请求
【发布时间】:2018-06-20 10:34:35
【问题描述】:

我想在每 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) 实现了相同的功能,但是每个请求都驻留在不同的文件中,因此很难跟踪。

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

谢谢

【问题讨论】:

  • 你应该使用箭头函数()= {}而不是function ()

标签: javascript angular rxjs observable


【解决方案1】:

还有更好的方法来做同样的事情,

你应该使用Observable.interval而不是setInterval

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

【讨论】:

  • 谢谢这就是我要找的东西。我不知道如何结合计时器和 forkJoin。
  • @ShrutiNair,很高兴知道这一点,编码愉快:)
猜你喜欢
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多