调用API时Redux未等待接口响应就提前触发失败逻辑问题求助
问题原因
callPostApi冗余封装+错误静默是核心诱因
你给本身返回Promise的axios.post额外手动套了一层Promise,外层的try/catch只能捕获同步代码错误,一旦出现同步异常(比如config变量未定义、axios未正确引入),你只打印了错误,既没有调用手动Promise的reject,也没有向外抛出异常,错误被直接吞掉后函数会返回undefined,这就是你拿到的resp为undefined的原因。- 可排查项:Redux异步中间件配置错误
如果没有正确注册redux-thunk中间件(Redux Toolkit默认内置,旧版Redux需要手动引入),Redux无法处理返回函数的异步action,会直接跳过内部异步逻辑,提前执行后续代码。
修复方案
1. 重构ApiCall.js,去掉冗余封装,正确处理错误
export const callPostApi = async (url, body) => { console.log('url ==> ', url, ' body ===> ', body); try { const response = await axios.post(url, body, config); console.log('response ==> ', response.data); const { success, data, message } = response.data; if (!success) { alert(message); // 可选:如果需要业务错误也走catch分支,打开下方注释 // throw new Error(message) } return response.data; } catch (error) { console.log('error in post api', error); // 抛出错误让上层逻辑捕获处理,不要吞错误 throw error; } }; export const callLoginApi = async (body) => { return callPostApi(apis.LOGIN_URL, body); };
2. 检查Redux中间件配置
如果是旧版原生Redux,确保创建store时注册了thunk:
import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; const store = createStore(rootReducer, applyMiddleware(thunk));
如果用Redux Toolkit不需要额外配置,默认已内置thunk支持。
内容的提问来源于stack exchange,提问作者Neha。
相关产品推荐
相关产品推荐

