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