1

我在我的应用程序中使用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。

4

0 回答 0