在Observable中返回自己的静态值

时间:2019-01-29 11:57:41

标签: node.js typescript observable axios nestjs

在我的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);
    }
}

1 个答案:

答案 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,因此您必须更改调用该方法的位置。