我正在尝试在执行请求之前挂钩流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')
);
我必须在我自己的observable中包装angularjs http.get方法吗?或者有更好/“更有棱角”的方式吗?
我建议不要使用间隔,因为网络请求可以延迟并采用更长/更短的时间,然后是可能/可能使其不一致的间隔。这样做的方法是......
// 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主题的原因是,如果您离开组件,那么它将不会继续轮询。