加载条http请求的间隔时间

问题描述 投票:0回答:1

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

javascript angular rxjs
1个回答
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主题的原因是,如果您离开组件,那么它将不会继续轮询。

© www.soinside.com 2019 - 2024. All rights reserved.