我正在尝试在执行请求之前挂钩流a)和b)在收到请求之后(例如显示/隐藏加载栏)。不使用 interval 我可以将boolean isLoaded设置为false并在subscribe函数中将其设置为true。
但是如何使用区间来做到这一点?
Observable.interval(5000).
timeout(3500, new Error('Server not available.')).
flatMap(() => this._http.get('http://api.dev/get/events')).
map(res => (<Response>res).json())
.subscribe(data => this.events = data,
error => console.debug('ERROR', error),
() => console.log('END')
);
我是否必须在自己的观察中包装角度http.get方法?或者有更好/“更有棱角”的方式吗?
答案 0 :(得分:0)
我建议不要使用时间间隔,因为网络请求可能会比该时间间隔(可能使时间不一致)延迟并花费更长/更短的时间。这样做的方法是...
// the import needed is
import { interval } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
private intervalSub: Subscription;
private ngUnsubscribe = new Subject();
somefunction (){
// Interval_Time was 5000
this.intervalSub = interval(Interval_Time)
.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
// call your api and do the request every Interval time
}
}
// make sure you have
ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
您需要ngUnsubscribe主题的原因是,如果您离开该组件,则它将不会继续轮询。