角度:从“可观察”中检查响应类型

时间:2018-10-18 11:41:19

标签: angular

我进行了一个非常基本的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); });
    }

2 个答案:

答案 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响应,而不仅仅是正文。