总结:dva 的model中的effect报错后就不再执行,需要对提前对报错进行处理或者预防报错!
// 获取接入参数详细配置
* queryAccessTableVo({ payload }, { race, call, put, take, select }) {
console.log('执行了')
const res = yield call(queryAccessTableVo, payload)
console.log('执行了2')
if (res?.data) {
let userId = yield select(({ user }) => user.id)
let params: OfflineApplication.recognizeParams = {
createTime: new Date().getTime(),
creator: userId,
jobConf: JSON.stringify({ column: res?.data?.tableDesc?.columns || [] }),
...payload
}
let recognizeRes = yield call(recognize, params);
res.data.tableDesc.columns.forEach((item, index) => {
item.encrypt = recognizeRes?.data[index] || ''//这个地方有错误,recognizeRes?.data为null
})
console.log(res.data.tableDesc.columns, 'res')
console.log(recognizeRes, '脱敏规则')
yield put({ type: 'updataAccessTableVo', payload: res.data })
}
},
上面这个地方有错误,recognizeRes?.data为null,报错信息如下。奇怪的是竟然也会导致后面切换的时候这个model不会执行!我已开始以为是forEach中报错导致的阻塞,发现不是,后面经过测试,发现是Effect中报错会导致这个Effect后面无法在执行,所以对于Effect要考虑好处理报错的问题,redux-saga一般是用try catch处理报错的问题。
报错信息