我有一个函数,每2.5秒调用一次以检查在后台运行的任务。get如果响应为错误,则它将axios调用到url,如果响应成功,则停止该函数。
get
这在Chrome和Mozilla上完美运行,但由于某些原因在IE(版本11)中不起作用。该函数可以无限地调用自身,但是检查日志表明它仅调用axios一次res.data.err == "Task not ready",即使后端任务已经完成,它也将永远循环。
res.data.err == "Task not ready"
为什么没有在IE上再次调用axios?有什么我想念的吗?
checkProgress() { axios.get(url.CHECK_UPLOAD_TASK, { params: { id: this.state.taskID} }).then(res => { if(res.data.success){ this.setState({loading: false}); //do something if successfully finished task } else { if(res.data.err == "Task not ready") { setTimeout(() => { this.checkProgress(); },2500); } else { this.setState({loading: false}); // do something if task had an error } } }); }
我在InternetExplorer(11,Edge)上也遇到了类似的问题(尽管使用了fetch),用于轮询服务。我发现使用“ Pragma:no- cache”标头解决了该问题。
您可以尝试一下:
const config = { headers: { Pragma: 'no-cache'}, params: { id: this.state.taskID } }
该呼叫应如下所示:
axios.get(url.CHECK_UPLOAD_TASK, config).then(...)