總結: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處理報錯的問題。
報錯信息