Выдать пользовательскую ошибку с телом ответа в вызове - PullRequest
0 голосов
/ 08 апреля 2019

Я хотел бы знать, как я могу создать настраиваемую обработку ошибок, в которой я бы получил тело разрешенного ответа и передал его пользовательской ошибке в функции выборки. В моем примере я получил ошибки проверки многих полей в теле ответа. Вот пример:

class ValidationError extends Error {
  constructor(resBody, ...params) {
    super(...params);

    this.name = 'ValidationError';
    this.body = resBody.json();
  }
}

И это функция выборки:

return fetch(
  `${this.formUrl(id)}/status`,
  {
    method: 'PATCH',
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(jsonBody)
  })
  .then((res) => {
    if (res.ok) {
      return res.json();
    }
    if (res.status === 400) {
      throw new ValidationError(res.body);
    } else {
      throw new Error(`http failed: ${res.status} ${res.statusText}`);
    }
  });

Который я затем использую в своем компоненте:

  .then(() => {
      this.setState({navigateTo: '/'})
  }).catch(error => {
    this.setState({error});
  })

Но это не так, поскольку res.body - это readableStream в этой точке. Как я могу исправить это, чтобы я мог установить другие error types на основе response status в моей функции fetch, где я мог бы использовать resolved response body?

...