Redux Observable中map操作未触发问题求助
兄弟,我来帮你捋捋为啥代码里那个标注“I AM NEVER GETTING TO THIS PART OF THE CODE”的map函数进不去,结合Redux Observable的常见坑,大概率是下面几个原因:
检查
getSiteEDCAccountsObservable的状态
你在switchMap里调用的getSiteEDCAccounts如果没有正确发出值(比如API请求失败、无返回数据),或者中途出错却没处理,后续的map操作符根本不会触发。建议给这个Observable加错误捕获和日志,排查是否有异常:const siteEdcAccount$ = getSiteEDCAccounts(siteId) .pipe( catchError(error => { console.error('getSiteEDCAccounts出错:', error); return empty(); // 或者返回一个自定义错误action }), tap(data => console.log('getSiteEDCAccounts返回数据:', data)) );确认
siteId参数是否正确
你这里写了const siteId = { params };,这会把params包装成{ params: 原params值 }的对象。如果getSiteEDCAccounts实际需要的是直接传入params而非包装后的对象,请求可能无法正确发起,Observable自然不会发出值。可以先改成const siteId = params;试试。排查
debounceTime(250)是否过滤了action
如果短时间内多次触发LOAD_FIVE_CP_MONITORING_DATA_STARTEDaction,debounceTime会只保留最后一次触发的action,前面的都会被丢弃。你可以临时注释掉.debounceTime(250),测试是否能进入map函数,排除这个因素。验证action type是否完全匹配
确认FIVE_CP_MONITORING_ACTION_TYPES.LOAD_FIVE_CP_MONITORING_DATA_STARTED的值和你dispatch的action的type完全一致,有没有拼写错误、大小写问题?可以在epic开头加个tap操作打印收到的action,确认是否正确接收到了目标action:action$ .ofType(FIVE_CP_MONITORING_ACTION_TYPES.LOAD_FIVE_CP_MONITORING_DATA_STARTED) .tap(action => console.log('收到的action:', action)) // ... 后续操作检查epic是否正确注册
如果这个epic没有被添加到Redux Observable的middleware的epic组合里,这段代码根本不会被执行,自然不会进入map。确认你在配置store时,把fiveCPMonitoringLoadEpic加入了combineEpics或者直接传给了createEpicMiddleware。
内容的提问来源于stack exchange,提问作者JimmyBoy

