Диспетчеризация в промежуточном программном обеспечении приводит к действию с неправильным типом - PullRequest
1 голос
/ 13 марта 2019

Я пытаюсь создать простое промежуточное ПО для обработки событий сокетов.

const join = (channel) => (dispatch) => {
 dispatch({
  type: 'ACTION-1',
  socketChannel: {...},
  events: [...],
 });
};

Я отправляю это действие, которое вызывает его. И теперь, когда метод отправки был вызван в моем промежуточном программном обеспечении с типом «ACTION-2» и получил socketData в качестве полезной нагрузки, я вижу в своей консоли, что «ACTION-1» был запущен дважды, и в последний раз он пришел с моим socketData полезная нагрузка.

Интересно, почему «ACTION-1» был зарегистрирован вместо «ACTION-2» и как я могу это исправить? Буду признателен за вашу помощь.

import { socket } from 'services/socket';

const socketMiddleware = ({ dispatch }) => next => (action) => {
  const {
    channel,
    events, // an array of events for the channel
    ...rest
  } = action;


  if (typeof action === 'function' || !channel) {
    return next(action);
  }

  const {
    type,
    name,
  } = channel;


  const channelInstance = socket.instance[type](name);

  events.forEach((event) => {
    const handleEvent = (socketData) => {
      dispatch({ type: 'ACTION-2', socketData, ...rest });
    };
    channelInstance.listen(event.name, handleEvent);
  });

  return next(action);
};

export {
  socketMiddleware
};

1 Ответ

1 голос
/ 14 марта 2019

выглядит так, как будто вы не направляете канал в исходной рассылке, и вам не удается завершить промежуточное программное обеспечение, если:

if (typeof action === 'function' || !channel) {
  return next(action);
}

, чтобы исправить это, вы должны добавить канал в вашу рассылку:

const join = (channel) => (dispatch) => {
 dispatch({
  type: 'ACTION-1',
  socketChannel: {...},
  events: [...],
  channel: { type: '...', name: '...' }
 });
};
...