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