为什么服务错误作为字符串而不是 json 对象发回?

Why service error is send back as a string and not a json object?

我有简单的service:

getCommandResult(fullCommand: string): Observable<any> {

    return this.http.post(this.callUrl, requestBody)
      .map(this.extractData)
      .catch(this.handleError);
  }

  private extractData(res: Response) {
    let body = res.json();
    return body || { };
  }
  private handleError (error: Response | any) {
    return error.json();
  }

这是我对该服务的调用

   this.myService.getCommandResult(commandFullString)
      .subscribe(res => {this.commandResponse = res;
          this.parseRestResponse();
        },
        error => {this.errorResponse = error;
          // **here I got string, not object to work with**
        },
        function() {
          doSomwthing()
        }
      );

当我从服务中得到错误时,我想 return 我得到的错误对象,但我得到的是 return 一个包含以下信息的字符串:

"You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable."

我试图理解为什么响应工作正常,我得到了预期的对象。但是出错时我没有得到相同的对象,只有字符串和消息。

请查看此 link

简而言之,catch 用于将一个可观察序列与您传递给它的下一个可观察对象一起继续。在您的示例中,您没有将可观察对象传递给 catch.

根据代码的外观,您应该只删除带有 catch 的行(因此会出现错误)。

handleError 应该是 return 一个 Observable,而不是一个对象(正如消息告诉你的那样

所以你的代码应该是

private handleError (error: Response | any) {
  return Observable.throw(error.json());
}