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