在我的nest.js项目中,我对开放的API进行了get请求。如果API没有结果,则显示HTTP Status400。在这种情况下,我想从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);
}
}
答案 0 :(得分:2)
对于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
,因此您必须更改调用该方法的位置。