为什么服务错误作为字符串而不是 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());
}
我有简单的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());
}