Angular HttpClient - обрабатывать пустые и непустые ответы - PullRequest
0 голосов
/ 09 февраля 2019

Предполагая, что у нас есть 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 голосов
/ 09 февраля 2019

Как выясняется, это проблема, только если сервер возвращает 200.Если сервер возвращает статус «без содержимого» * ​​1002 * (который подходит для пустого тела ответа), то post возвращает null.Я бы предпочел undefined отличить от действительного null ответа JSON (поскольку null является действительным токеном JSON), но это то, что есть, и то, что это достаточно хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...