吞下我可观察到的错误并返回缓存值——所有这些都可以保持订阅的活力

Swallowing an error in my observable and returning a cached value - all keep the subscription alive

本文关键字:所有这些 都可以 缓存 观察 返回 错误      更新时间:2023-09-26

请保存我的理智。我正试着在我的可观察范围内做一些错误处理。我关注了很多文章,但都没有点击。我宁愿处理服务内部的错误,并在发生错误时推出缓存的数据。

我在我的angular2组件内这样做。。。

private initializeJobPolling() {
    this.subscription = Observable
        .interval(5000)
        .startWith(0)
        .flatMap(() => {
            return this.jobService.getJobs();
        })
        .subscribe(
            (jobsContainer: any) => {
                let allJobs: IJob[] = jobsContainer.jobs.map(j => new Job(j));
                this.allJobs = allJobs;
            }            );
}

以及内部jobService。。。

getJobs() {
    let thisService = this;
    return thisService.http.get('app/services/jobs.json')
        .map((responseData) => {
            console.log('getting Jobs from API');
            thisService.allJobs = responseData.json();
            return thisService.allJobs;
        });
}

使用catch:

getJobs() {
  return this.http.get('app/services/jobs.json')
    .map((responseData) => {
      console.log('getting Jobs from API');
      this.allJobs = responseData.json();
      return this.allJobs;
    })
    .catch(err => {
      console.error(err);
      return Observable.just(this.allJobs);
    });
}

更新

正如评论中所指出的,RxJS 5没有.just,所以使用.of

getJobs() {
  return this.http.get('app/services/jobs.json')
    .map((responseData) => {
      console.log('getting Jobs from API');
      this.allJobs = responseData.json();
      return this.allJobs;
    })
    .catch(err => {
      console.error(err);
      return Observable.of(this.allJobs);
    });
}
相关文章: