Блок многократного использования JS && DRY 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 ответ

Я думаю должно быть

yield * errorHandler();

Это в основном похоже на запуск одного и того же кода, поэтому у вас не возникнет никаких проблем. Вот еще одно предложение:

  • Если вы хотите устранить ошибку, создайте выделенное событие, например CLEAR_DATA_ERROR, Кажется странным использовать тот же самый для сброса ошибки.
  • const failed = error && true; выглядит немного странно Если ваша идея получить failed всегда правдив, я могу заверить вас, что error всегда там. Вы не можете попасть в catch заблокировать без ошибок.
Другие вопросы по тегам