axios轮询收到'done'后无法停止及执行下一步问题求助
解决axios轮询不停止且不执行下一步的问题
你的代码核心问题是没正确处理axios.get的异步特性,直接访问Promise对象的data属性永远拿不到后端返回的'done',导致判断条件永远不触发,轮询停不下来,nextStep也不会执行。
错误根源分析
原代码里var w = axios.get('/yet'),w是一个Promise实例,不是后端的响应结果。此时w.data要么不存在,要么不是你要的'done',所以if(w.data === 'done')永远为false,自然不会执行后续逻辑。
修正后的代码
const getDataFromServer = () => { const intervalId = setInterval(async () => { try { // 用await等待请求完成,拿到真实响应数据 const response = await axios.get('/yet'); if (response.data === 'done') { nextStep(); // 清除定时器停止轮询 clearInterval(intervalId); } } catch (error) { console.error('轮询请求出错:', error); // 可选:如果请求失败需要停止轮询,就打开下面的注释 // clearInterval(intervalId); } }, 1000); };
关键修改点
- 给setInterval的回调函数加上
async,这样内部可以用await等待axios请求完成 - 用
await获取axios的完整响应对象,再通过response.data拿到后端返回的值 - 用
const声明定时器ID(比var更安全,避免变量作用域问题) - 增加
try/catch捕获请求错误,防止一次请求失败导致后续轮询异常(比如后端临时报错,不至于整个轮询逻辑挂掉)
内容的提问来源于stack exchange,提问作者user22092369
相关产品推荐
相关产品推荐

