佐贺县Socket io

时间:2020-04-09 20:22:44

标签: reactjs sockets socket.io react-redux redux-saga

请查看我的传奇代码。我收到了服务器的响应,但未调度我的动作。响应来自服务器,根据内容,我需要调度操作并注销用户。我究竟做错了什么?这段代码是根据传奇的示例和文档编写的。这是完整的代码。谢谢。


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));
  }
}

0 个答案:

没有答案