Socket io, Saga - PullRequest
       22

Socket io, Saga

0 голосов
/ 09 апреля 2020

посмотрите на мой саг-код, пожалуйста. У меня есть ответ от сервера, но мои действия не отправляются. Ответ приходит с сервера, в зависимости от содержимого, мне нужно отправить действие и выйти из системы пользователя. Что я делаю неправильно? Этот код был написан по примеру и документации саги. Это полный код. Спасибо за любую помощь.


const createSocketConnection = (url, token) => io(...);

const createSocketChannel = socket => eventChannel(emitter => {

  const eventHandler = event => {
    emitter(sessionLimitNotification(event));
  };

  const errorHandler = errorEvent => {
    emitter(showErrorMessage(errorEvent));
  };

  socket.on('sessionLimit', eventHandler);
  socket.on('error', errorHandler);

  const unsubscribe = () => {
    socket.off('sessionLimit', eventHandler);
  };

  return unsubscribe;
});

function* socketSaga(socket) {
  try {
    const socketChannel = yield call(createSocketChannel, socket);

    while (true) {
      try {
        const payload = yield take(socketChannel);
        yield put(payload);
      } catch (error) {
        yield put(showErrorMessage(error));
      }
    }
  } catch (err) {
    yield put(showErrorMessage(err));
  }
}

export default function* websocketSaga() {
  try {
    while (true) {
      yield take([START_MESSAGES_SAGA]);

      const apiToken = new ApiToken();
      apiToken.getFromCookie();

      const socket = createSocketConnection(config.api.socketUrl, apiToken.token);

      const task = yield fork(socketSaga, socket);

      yield take(LOGOUT);

      socket.close();

      yield cancel(task);
    }
  } catch (err) {
    yield put(showErrorMessage(err));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...