【问题标题】:Return own static value in Observable在 Observable 中返回自己的静态值
【发布时间】:2019-06-22 13:12:52
【问题描述】:

在我的nest.js 项目中,我向一个开放的API 发出一个get 请求。如果 API 没有结果,我会得到 HTTP 状态 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);
    }
}

【问题讨论】:

    标签: node.js typescript observable axios nestjs


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 2013-06-09
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2014-04-30
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多