Как обрабатывать новые свойства объекта в потоке - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть функция, которая проверяет код состояния ответа fetch и выдает ошибку, чтобы я мог использовать catch для ее обработки.Я использую поток, которому не нравится, что я передаю ответ объекту Error, который мне нужен, чтобы обработать правильный код состояния и получить хорошую цепочку обещаний.

const StatusCodeHandler = (response: { statusText: string, ok: string }) => {
  if (response.ok) return response;
  const error = new Error(response.statusText);
  error.response = response;
  throw error;
};

это должно выглядеть как-тонапример, когда я его использую:

fetch(url).then(StatucCodeHandler)
          .then(respone=>response.json())
          .catch(error=>handleError(error.response.status));
....

В handleError Я буду выполнять определенные действия в зависимости от кода состояния.

Как лучше это сделать с помощью потока?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Наиболее правильным способом, вероятно, было бы определение пользовательского класса ошибок с помощью подкласса Error.

class RequestError extends Error {
  response: Response;
  constructor(message: string, response: Response) {
    super(message);
    this.response = response;
    this.message = message;
  }
};

const StatusCodeHandler = (response: Response) => {
  if (response.ok) return response;
  throw new RequestError(response.statusText, response);
};

( Попробуйте )

Если выиспользуя версию babel ранее 7, вы захотите transform-builtin-classes , чтобы разрешить субклассирование встроенной Error.

0 голосов
/ 24 сентября 2019

2-й метод с then и catch - лучший способ.Из-за лучшей обработки асинхронных операций, лучшего определения потока управления в асинхронной логике и т. Д. Преимущества.

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