dva 的model中的effect報錯後就不再執行的問題

總結: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處理報錯的問題。
報錯信息
在這裏插入圖片描述

發佈了53 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章