导入的fetch/axios函数在redux-saga的yield call中返回undefined排查
问题原因排查及解决方案
你遇到的问题和redux-saga的call方法本身无关,核心原因是导入导出逻辑异常,导致你拿到的fetchAPI本身就是undefined,call调用undefined自然不会执行函数逻辑,也不会有返回值。
常见触发原因
- 导出导入语法不匹配:如果
utils/routes/api文件中fetchAPI是default导出,你使用具名导入import { fetchAPI }就会拿到undefined;反之如果是具名导出用默认导入也会出现同样问题。 - 循环依赖:如果
Saga.ts和utils/routes/api(或其依赖链)存在互相导入的情况,ES模块解析时会先返回未初始化的导出值,此时拿到的fetchAPI就是undefined。 - 导出逻辑错误:
utils/routes/api文件中存在同名的类型导出(type/interface)覆盖了值导出,或者导出语句写在fetchAPI定义之前,都可能导致导出值为undefined。 - 路径别名配置错误:如果
utils/是你配置的路径别名,可能存在tsconfig/打包工具的paths配置错误,导致实际导入的是其他空文件/不存在的文件,返回undefined。
排查步骤
- 在导入
fetchAPI的下一行添加日志console.log(fetchAPI),如果打印结果为undefined,即可确认是导入导出问题,和saga逻辑无关。 - 核对
utils/routes/api的导出语法:- 如果是
export default fetchAPI,导入改为import fetchAPI from 'utils/routes/api' - 如果是
export const fetchAPI = ...,保持import { fetchAPI } from 'utils/routes/api'即可
- 如果是
- 排查循环依赖:检查两个文件的导入链,是否存在
api文件间接导入了Saga.ts内的变量的情况,调整代码解除循环依赖即可。 - 验证路径别名:直接写相对路径导入
fetchAPI测试,如果相对路径导入正常,就是路径别名配置错误导致的问题。
内容的提问来源于stack exchange,提问作者D3V
相关产品推荐
相关产品推荐

