Вернуть собственное статическое значение в Observable - PullRequest
0 голосов
/ 29 января 2019

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

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

Observable

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 Ответ

0 голосов
/ 29 января 2019

С 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, поэтому вам нужно изменить места, где вызывается метод.

...