使用rxjs concat出现错误后如何继续调用API?

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

我正在使用concat依次调用多个API,但是当出错时,concat停止调用api,因此如何获取错误并继续调用下一个API,这是我的代码:

getData() {
    concat(...this.data.map(asset =>
      this.assetService.requestData({ assetId: asset._id })
    ))
      .pipe(catchError(error => {
        console.log(error);
        // return of(null);
        this.error = error;
        return throwError(error);
      }))
      .subscribe();

  }
angular rxjs6
1个回答
0
投票

每个可观察到的错误捕获都应单独发生。您可以简单地返回一个空的observable:

import { EMPTY } from 'rxjs';

concat(...this.data.map(asset =>
  this.assetService.requestData({assetId: asset._id})
    .pipe(catchError(error => {
      console.log(error);
      this.error = error;
      return EMPTY;
    }))
  ))
  .pipe(filter(data => !!data)) // add this line if you do not want to see nulls in result
  .subscribe();


另一个选择是使用onErrorResumeNext功能:

import { onErrorResumeNext } from 'rxjs';

onErrorResumeNext(...this.data.map(asset => 
  this.assetService.requestData({assetId: asset._id})
)
.subscribe();
© www.soinside.com 2019 - 2024. All rights reserved.