angular - 开始第一次调用 IntervalObservable 即时

标签 angular typescript rxjs rxjs5

我正在使用 IntervalObservable 连续调用我的应用程序的服务器端。我可以订阅和取消订阅 Oberservable,一切正常,但有一个异常(exception):

对服务器的第一次调用被延迟,但我希望它是即时的。 IntervalObservable 的行为原则上是正确的,但不符合我的要求。

@Injectable()
export class LoggerService {
  constructor(private http: Http) { }
  private apiURL = 'assets/file.json'; 

  getList() {
       return IntervalObservable.create(1000).flatMap(() 
       => this.http.get(this.apiURL))
      .map(this.extractData)
      .catch(this.handleError);
  }
  private extractData(res: Response) {
    var fooot = new Foo();
    fooot.fillFromJSON(JSON.stringify(res.json()));
    return fooot;
  }

  private handleError(error: any) {
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg);
    return IntervalObservable.throw(errMsg);
  }
}

那么我怎样才能在第一次调用时立即调用服务器,然后在定义的延迟后调用服务器呢?

最佳答案

两件事,

  1. 您可以使用工厂方法而不是派生类型,即 Observable.interval(3000) 而不是 IntervalObservable.create
  2. 您可以使用 timer 来代替单个运算符:

    return Observable.timer(0, 1000)
      .flatMapTo(this.http.get(this.apiURL))
      .map(this.extractData)
      .catch(this.handleError);
    

关于angular - 开始第一次调用 IntervalObservable 即时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994096/

相关文章:

javascript - RxJS 方法导致回调 hell

javascript - Typescript Resolve Observable 实体

angular - typescript 参数类型不匹配不会抛出错误

javascript - Angular 动画查询错误地返回零元素

angular - 如何将响应式(Reactive) FormGroup 与 Angular Material 结合使用

angular - 在 Angular 组件之间共享字符串

javascript - RxJs:从 ID 标识的其他流更新列表中的值

javascript - 在 Angular2 中设置基本导入目录

angular - 如何手动强制重新渲染Angular2中的组件?

html - 在 Angular 8 HTML 模板中为 *ngIf 使用枚举