JS可重复使用的块&& DRY Saga

时间:2018-01-19 10:59:20

标签: redux-saga

我已经在同一页面上使用了Catch块三次:

function* getSomeData() {
    try {
        // Catch block is used three times 
  } catch (error) {
    const failed = error && true;
    yield put({
      type: LOAD_DATA_ERROR,
      failed
    });
    yield call(delay, 2000);
    yield put({
      type: LOAD_DATA_ERROR,
      failed: false
    });
  }
}

我用可重复使用的代码转换它。但我在发电机内部有一台发电机。 考虑到这一点,我可能有一天会遇到意想不到的行为吗?

// Declaration
function* errorHandler(){
    yield put({
      type: LOAD_DATA_ERROR,
      failed: true
    });
    yield call(delay, 2000);
    yield put({
      type: LOAD_DATA_ERROR,
      failed: false
    });
  }

  // Place of use
  try{
    //-----------------
   } catch (err) {
    yield errorHandler();
}

1 个答案:

答案 0 :(得分:1)

我认为应该是

yield * errorHandler();

它基本上就像运行相同的代码,因此您不会遇到任何问题。这是其他一些建议:

  • 如果要清除错误,请创建CLEAR_DATA_ERROR等专用事件。使用相同的一个来清除错误看起来很奇怪。
  • const failed = error && true;看起来有点奇怪。如果您的想法是让failed始终保持真实,我可以向您保证error始终存在。如果没有错误,您不能陷入catch块。