我已经在同一页面上使用了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();
}
答案 0 :(得分:1)
我认为应该是
yield * errorHandler();
它基本上就像运行相同的代码,因此您不会遇到任何问题。这是其他一些建议:
CLEAR_DATA_ERROR
等专用事件。使用相同的一个来清除错误看起来很奇怪。const failed = error && true;
看起来有点奇怪。如果您的想法是让failed
始终保持真实,我可以向您保证error
始终存在。如果没有错误,您不能陷入catch
块。