我有一个正在工作的大型项目,并且想知道调度操作的正确方法。
在我的组件容器中,我映射了这个函数。
const mapDispatchToProps = (dispatch) => {
return {
ackMessage:(convo)=> {
chatSocketService.messageAcknowledge(convo, dispatch);
}
}
您可以看到我正在将调度功能传递给我的服务。
我需要传递调度,因此如果套接字事件失败,我可以在服务内调度错误操作。
这可以吗?还是将调度始终保存在容器中会更好。如果我将那个套接字服务函数变成一个承诺,那么我可以这样做,但是我们可能会在容器中的调度函数中添加太多逻辑?
传递调度对象可以吗?
编辑:这是我的套接字服务的片段。在我的套接字发出的错误事件中,我需要调度一个错误:
const chatSocketService = {
messageAcknowledge(convo, dispatch) {
const socketConnection = getSocket();
socketConnection.emit(socketMessages.ACKNOWLEDGE_MESSAGE, {convoID:convo.convoID, msgID:convo.lastMsg.msgID },
(response)=> {
socketError(response, convo, dispatch);
});
}
}
const socketError = (response, convo, dispatch) => {
if (response.error === CHAT_SESSION_EXPIRE) {
sessionExpire(dispatch);
} else if(response.error) {
dispatch(convoError(convo.convoID, true));
}
};
const sessionExpire = (dispatch)=> {
dispatch(disconnectedMessage('Session has expired. Please log out and log back in'));
dispatch(socketDisconnected(true));
};
然后在我的 actions.js 中,我有这些操作:
export const CONVO_ERROR = 'CHAT_CONVO_ERROR';
export const convoError = (convoID, error) => ({
type:CONVO_ERROR,
convoID,
error
});
export const SOCKET_DISCONNECTED = 'CHAT_SOCKET_DISCONNECTED';
export const socketDisconnected = (disconnected)=> ({
type:SOCKET_DISCONNECTED,
disconnected
});