加载条http请求,间隔为

时间:2016-03-08 22:30:11

标签: javascript angular rxjs

我正在尝试在执行请求之前挂钩流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方法?或者有更好/“更有棱角”的方式吗?

1 个答案:

答案 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主题的原因是,如果您离开该组件,则它将不会继续轮询。