@lexstile

Как правильно показывать сообщения от BE?

Задача: встроиться между axios и обработкой результата с BE, выполнить действия (в моем случае показать сообщение), и передать результат дальше для обработки другой функции.

1. http - инстанс axios
2. middlewareMessage - отправка сообщения
3. emailConfirmation - дальнейшая обработка результата

То есть, я не могу это сделать в http в интерсепторах ввиду того, что не везде нужен показ сообщения.
Если это делать в emailConfirmation, получится много однотипного кода.

Вопрос: как правильно реализовать данную задачу, а особенно взаимодействие ф-ций между собой?
Мой вариант, предложенный ниже, не особо мне нравится.

Проблема данного решения, как минимум, еще и в том, что сложно будет встроить доп. функционал наподобие middlewareMessage.

const call = ({ search, ...params }) =>
  http.post(`${generatePath(ENDPOINTS.AUTH.EMAIL_CONFIRMATION, params)}${search}`);

export const emailConfirmation = async (data) => {
  const [execute] = middlewareMessage(call);
  await execute(data);
};

export const middlewareMessage = (fn) => {
  const execute = async (params) => {
    try {
      const response = await fn(params)
        .then((response) => get(response, 'data', null))
        .catch((error) => throwError(getErrors(error)));

      const messageType = get(response, 'message.type', null);
      const messageText = get(response, 'message.text', null);

      if (messageType && messageText) {
        store.dispatch(
          messageSlice.actions.setMessage({
            key: getRandomString(),
            type: messageType,
            text: messageText,
          })
        );
      }

      return response;
    } catch (error) {
      store.dispatch(
        messageSlice.actions.setMessage({
          key: getRandomString(),
          type: MESSAGE_TYPES.ERROR,
          text: get(error, 'message'),
        })
      );

      return error;
    }
  };

  return [execute];
};
  • Вопрос задан
  • 24 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы