在Redux Saga中依次调用操作(同步)

时间:2019-03-25 10:56:57

标签: redux-saga

我要进行一些更改后刷新它们的列表,它们是要击中的不同端点,并且它们需要同步(我想在获得第一个函数响应后调用第二个函数)。

inviteUsers()操作获得响应后,我想调用getAllUsers()操作以获取更新的列表。

我的问题是,处理那些顺序调用的最佳实践是什么?我应该添加另一个saga来监听INVITE_USERS_SUCCESS,然后调用第二个动作,还是应该在getAllUsers()动作中调用inviteUsers()动作呢? >

// first action
function* inviteUsers(args) {
    try {
        yield call(() => API.post('/users/invite', args));

        yield put({
            type: CustomConstants.INVITE_USERS_SUCCESS
        });

        // call second action
        yield call(getAllInvites);
    } catch (e) {
        yield put({
            type: CustomConstants.INVITE_USERS_FAILURE,
            error: e,
        });
    }
}

// second action (after first action response)
function* getAllInvites() {
    try {
        yield call(() => API.get('/users/all-invites'));

        yield put({
            type: CustomConstants.LIST_PENDING_INVITES_SUCCESS
        });
    } catch (e) {
        yield put({
            type: CustomConstants.LIST_PENDING_INVITES_FAILURE,
            error: e,
        });
    }
}

1 个答案:

答案 0 :(得分:1)

  

我应该添加另一个传奇来监听INVITE_USERS_SUCCESS,然后调用第二个动作

是的,你应该。当您仅使用动作来触发它们,并且更一般而言,使它们进行交流(这是事件驱动的开发)时,您将获得最好的Redux-saga体验。

这不仅使您可以编写更多代码,而且可以开发独立的sagas。

  

或者我应该在InvitationUsers()动作中调用getAllUsers()动作

我不建议您这样做,因为您的inviteUsers传奇不会与getAllUsers传奇分离(因为它们是更大流程的一部分),并且您将无法在需要其他流程时分别使用它们。

让我知道是否需要更多帮助