我在我的应用程序中使用react-native-offline库对服务器的请求进行离线排队,该操作changeQueueSemaphore
给我带来了一些困难。我会尝试通过一个例子来解释。
假设我的应用通过三个基本操作在 Stack Overflow 中发布离线问题:
const createIssue = (issue) => action("CREATE_ISSUE",{issue},{retry: true});
const addComment = (comment) => action("ADD_COMMENT",{comment},{retry:true});
const closeIssue = (timeOfClosing) => action("CLOSE_ISSUE", {timeOfCLosing}, {retry: true});
当我的应用程序在离线模式下工作时,操作会按顺序输入到队列中,然后在重新获得网络连接时一个接一个地调度。为了调度最后两个动作,我首先需要调度 create issue 动作并从我的服务器获取生成的 id。因此,当使用 redux saga 监听createIssue
操作时,在我正在调度的处理程序中changeQueueSemaphore('RED')
-> 发送创建问题的发布请求 -> 从响应中检索 id 并将其保存在状态中,然后再次释放队列:
function* createIssueHandler(action: ActionType<typeof createIssue>) {
const {issue} = action.payload;
const {changeQueueSemaphore} = offlineActionCreators;
// stops the queue before generating id
yield put(changeQueueSemaphore('RED');
try {
const id = // Api Call to create Issue
// saves the id in state
yield put(createIssueSuccess(id));
// releases queue again
yield put(changeQueueSemaphore('GREEN');
} catch(err) {
// error handeling
}
function* addCommentHandler(action: ActionType<typeof addComment>) {
const issueId = yield select(getIssueIdFromState);
enter code here
// api call to `SERVER_URL/addComment/${issueId}`;
}
function* closeIssue(action: ActionType<typeof closeIssue>) {
// same as addCommentHandler
}
在查看操作日志后,我看到addComment
并且在导致队列停止closeIssue
之前正在调度操作。changeQueueSemaphore
任何帮助都会很高兴<3。