使用 Angular HTTP Observable 轮询 API
Poll API using Angular HTTP Observable
在我的组件 html 中,我使用 asyncPipe 订阅这个 http 服务。该服务将 json 响应对象映射到 class 实例数组。这一切都很好,但我希望 http 服务每隔几秒轮询一次。我已经尝试了很多东西(比如间隔),但目前看来 RXJS 有点雷区。有人用 Angular 6 实现过这种东西吗?
fetch(command, params?) {
return this.http.post(`http://localhost:4000/${command}`, params)
.pipe(
map((data: Data) => {
const statuses: Status[] = [];
for (const statusKey of Object.keys(data.statuses)) {
const newStatus = new Status(
// do some object translation...
);
statuses.push(newStatus);
}
return statuses;
})
)
.pipe(
catchError(EpisodeApiService.handleError)
);
}
这应该像下面这样简单:
pollInterval = 5000;
const httpObservable = interval(pollInterval).pipe(
switchMap(x => fetch(command, params?) )
);
pollInterval
可以根据需要更改。 interval
和 switchMap
应按如下方式导入:
import { interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';
在这里使用 switchMap
有助于取消任何延迟的挂起的 http 请求,这对性能有好处,尤其是在间歇性 Internet 连接期间。这就是为什么 RxJS 反应式方法比 setInterval()
.
等传统方法更受欢迎的原因
最后还要订阅,否则什么都不会发生:
httpObservable.subscribe(x => {});
如果你不想使用 rxjs,你也可以这样做
setInterval(function(){
serviceObj.httpObservable.subscribe(x => {});
}, 10000)
在我的组件 html 中,我使用 asyncPipe 订阅这个 http 服务。该服务将 json 响应对象映射到 class 实例数组。这一切都很好,但我希望 http 服务每隔几秒轮询一次。我已经尝试了很多东西(比如间隔),但目前看来 RXJS 有点雷区。有人用 Angular 6 实现过这种东西吗?
fetch(command, params?) {
return this.http.post(`http://localhost:4000/${command}`, params)
.pipe(
map((data: Data) => {
const statuses: Status[] = [];
for (const statusKey of Object.keys(data.statuses)) {
const newStatus = new Status(
// do some object translation...
);
statuses.push(newStatus);
}
return statuses;
})
)
.pipe(
catchError(EpisodeApiService.handleError)
);
}
这应该像下面这样简单:
pollInterval = 5000;
const httpObservable = interval(pollInterval).pipe(
switchMap(x => fetch(command, params?) )
);
pollInterval
可以根据需要更改。 interval
和 switchMap
应按如下方式导入:
import { interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';
在这里使用 switchMap
有助于取消任何延迟的挂起的 http 请求,这对性能有好处,尤其是在间歇性 Internet 连接期间。这就是为什么 RxJS 反应式方法比 setInterval()
.
最后还要订阅,否则什么都不会发生:
httpObservable.subscribe(x => {});
如果你不想使用 rxjs,你也可以这样做
setInterval(function(){
serviceObj.httpObservable.subscribe(x => {});
}, 10000)