Вернуть собственное статическое значение в Observable

В моем проекте nest.js я делаю запрос get на открытый API. Если от API нет результата, я получаю HTTP Status 400. В этом случае я хочу вернуть пустой статический объект из Observable,

this.getData(data.title)
         .subscribe((resp) => {
             console.log(resp);
         });

наблюдаемый

getData(title: string){
    const AuthStr = 'Bearer '.concat(API.TOKEN);
    const requestOptions = {                                                                                                                                                                                 
        headers: { Authorization: AuthStr }
      };
    const emptyResponse = {
        "data": [{"id": ''}]
    }
    try {
        return this.httpService.get(API.ID_URL + title, requestOptions);
    } catch (error) {
        if(error.response.status == 400){
            return of(JSON.stringify(emptyResponse)); //this doesn't work
        }
        this.errorHandling(error);
    }
}

1 ответ

Решение

С Observables, вы должны использовать catchError оператор вместо try/catch:

this.httpService.get(API.ID_URL + title, requestOptions)
  .pipe(catchError(err => {
    if (err.response && err.response.status == 400) {
      return of({});
    } else {
      this.errorHandling(err);
    }
  }));

Кроме того, вы можете преобразовать Observable к Promise, С помощью async/await вы можете использовать try/catch:

async getData(title: string) {
^^^^^
  // ...
  try {
      return await this.httpService.get(API.ID_URL + title, requestOptions).toPromise();
             ^^^^^                                                          ^^^^^^^^^^^^
  } catch (error) {
      if(error.response.status == 400){
          return emptyResponse;
                 ^^^^^^^^^^^^^
      }
      this.errorHandling(error);
  }

Обратите внимание, что getData теперь возвращает Promise и не Observable поэтому вы должны изменить места, где вызывается метод.

Другие вопросы по тегам