Redux Thunk常用操作 - 独立+组合

时间:2018-06-14 13:50:37

标签: redux redux-thunk

实现模式Dan(@gaearon)演示了here,我只想知道在以下场景中让常用操作独立工作的最佳方法:

const commonAction = () => {
  return async (dispatch, getState, api) => {
    try {
      const response = await api.get('/resource');
      dispatch(success('SUCCESS', response.data));

    } catch(error) {
      dispatch(error('ERROR', error));
      throw error; //this is the problem
    }
}

const combinedAction = () => {
  return async (dispatch, getState, api) => {
    try {
      await dispatch(commonAction());
      const otherResponse = await api.get('/otherResource');

      dispatch(success('COMBINED_SUCCESS', otherResponse.data));

    } catch(error) {
      dispatch(error('COMBINED_ERROR', error));
    }
}

上述方法的工作原理是,如果其中任何一个失败,由于COMBINED_ERROR重新抛出错误,将调度commonAction。但是,如果我想单独使用commonAction,由于重新抛出,我会得到一个未处理的承诺拒绝错误。

我有一个想法是一个可选的bool isStandAlone = true来决定是否重新投掷,即

const commonAction = (isStandAlone = true) => {
  return async (dispatch, getState, api) => {
    try {
      const response = await api.get('/resource');
      dispatch(success('SUCCESS', response.data));

    } catch(error) {
      dispatch(error('ERROR', error));

      if(!isStandAlone) {
        throw error;
      }
    }
}

然后在combinedAction我会:

await dispatch(commonAction(false));

这是代码味吗?有没有更好的和/或不同的方法来解决这个问题?

0 个答案:

没有答案