Angular HttpClient-处理空和非空响应

时间:2019-02-09 13:30:08

标签: angular typescript angular-httpclient

假设我们有http: HttpClient,我想提供一个服务调用包装器方法,如下所示:

public async post<T>(url: string, body: any): Promise<T> {
    // do some stuff

    const response = await this.http.post<T>(url, body, this.options).toPromise();

    // do more stuff

    return response
}

T以外的任何void都可以正常工作。我希望(并且仍然希望实现)的行为是,当服务器未返回任何响应时,不返回任何值(Promise<void>)。我现在想知道实现此目的的最佳方法是对空的响应主体使用不同的功能。

我认为无法根据通用类型进行歧义消除吗?我试图寻找实现此目标的方法,但似乎没有办法做到这一点,考虑到TypeScript的工作方式和工作方式,这很有意义。首先,该类型将在调用站点上可用(例如,在我希望响应主体为空的情况下,我将以service.post<void>(...)的形式调用该方法。)

我想知道的一件事是,是否总是可以使它返回一个字符串(responseType: "text"),然后手动解析JSON。然后,我可以检查状态和响应字符串,如果它们分别是200"",我知道我可以返回undefined如果这是正确的方法(但我不确定是否正确),我有几个问题:

  1. 手动解析JSON是否会有性能缺陷?
  2. 我应该使用什么方法来解析它? HttpClient使用什么?
  3. 如何确保错误处理与HttpClient.post方法中发生的错误处理相同?理想情况下,我不希望它偏离HttpClient.post内部的错误机制。

还是我缺少实现所需方法的另一种简单方法?我的任何假设是错误的吗?

1 个答案:

答案 0 :(得分:1)

事实证明,这仅是服务器返回200的问题。如果服务器返回“无内容”状态204(适用于空的响应正文),则post返回null。我本来希望undefined与实际的null JSON响应区分开来(因为null是有效的JSON令牌),但这是它的本质,并且它足够好我。