我进行了一个非常基本的api调用。此函数调用API服务器删除,该服务器将随机响应NoContent(204)或Ok(200)。
我试图弄清楚observable是否返回了204或200的响应,并且不知道如何正确执行此操作。
建议表示赞赏。下面的示例代码:
checkNoContent(): Observable<any> {
return this.http.delete<any>('localhost:5001/api/test');
}
testingFunction() {
this.checkNoContent().subscribe(
(res) => { //check if NoContent },
(error) => { console.info(error); });
}
答案 0 :(得分:0)
在http调用中使用'.pipe'方法,然后使用rxjs'catchError',从而在回调中触发错误处理程序:
import { Observable } from 'rxjs/Observable'
import { catchError } from 'rxjs/operators'
checkNoContent(): Observable<any> {
return this.http.delete<any>('localhost:5001/api/test')
.pipe(catchError((error: any) => this.errorHandler(error)))
}
errorHandler (error) {
// do whatever you want with your error and throw it to your susbscription error
let errorCode = error.code
return Observable.throw(errorCode)
}
testingFunction() {
this.checkNoContent().subscribe(
(res) => { //check if NoContent },
(error) => { console.info(error); // here is where your error result will appear });
}
更新:
使用带有地图的管道:
import { map } from 'rxjs/operators'
checkNoContent(): Observable<any> {
return this.http.delete<any>('localhost:5001/api/test')
.pipe(map(
res => this.verifyResponseType(res),
err => // call your error handler
))
}
verifyResponseType (res) {
return Observable.throw(res.status)
}
答案 1 :(得分:0)
??
204将不会发送正文,因此res将是不确定的。 200可能会发送某种成功消息。如果不是这样,那么console.log将重新运行几次,然后查看您得到了什么。如果两个响应都为空,请在Chrome中使用“网络”标签查看实际响应是什么。
您可以尝试搜索Angular文档,以查看是否可以显示状态代码。
https://angular.io/api/common/http/HttpClient#methods
通过手动创建Request对象,看起来将返回原始http响应,而不仅仅是正文。