首页 > 解决方案 > 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
}

这对任何Texcept 都按预期工作void。我希望(并且仍在寻求实现)的行为是Promise<void>在服务器未返回任何响应时不返回任何值()。我现在想知道实现这一点的最佳方法是没有针对空响应主体的不同功能。

我认为没有办法根据泛型类型来消除歧义?我试图寻找方法来做到这一点,但似乎没有办法做到这一点,考虑到 TypeScript 的作用和工作原理,这是有道理的。Fwiw,该类型将在调用站点可用(例如,我将调用该方法,因为service.post<void>(...)我期望一个空的响应主体)。

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

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

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

标签: angulartypescriptangular-httpclient

解决方案


事实证明,如果服务器返回,这只是一个问题200。如果服务器返回“无内容”状态204(适用于空响应正文),则post返回null. 我更愿意undefined与实际的nullJSON 响应区分开来(因为null它是一个有效的 JSON 令牌),但它就是它的本质,它对我来说已经足够好了。


推荐阅读