Axios 仅在自调用函数中调用一次 (Internet Explorer)
Axios only called once inside self-invoking function (Internet Explorer)
我有一个函数,它每 2.5 秒调用一次以在后台检查任务 运行。如果响应是错误,它调用 axios 到 get
a url,如果响应成功,我停止该函数。
这在 Chrome 和 Mozilla 中完美运行,但由于某些原因它在 IE(版本 11)中不起作用。该函数无限调用自身,但查看日志显示它只调用了一次 axios,然后它 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) 轮询服务时也遇到了类似的问题(尽管使用了提取)。我发现使用 "Pragma: no-cache" header 解决了它。
你可以试一试:
const config = {
headers: { Pragma: 'no-cache'},
params: { id: this.state.taskID }
}
调用应如下所示:
axios.get(url.CHECK_UPLOAD_TASK, config).then(...)
谢谢丹尼尔,
那太好了。这个对我有用。
另一种解决方法是在axios.create里面定义如下,这样我们就可以正常使用了。
测试了两种解决方案并且效果很好!
const api = axios.create({
headers: { Pragma: 'no-cache' },
});
当然你必须使用 api.get(...) 而不是 axios.get(...)。
希望对您有所帮助!
我有一个函数,它每 2.5 秒调用一次以在后台检查任务 运行。如果响应是错误,它调用 axios 到 get
a url,如果响应成功,我停止该函数。
这在 Chrome 和 Mozilla 中完美运行,但由于某些原因它在 IE(版本 11)中不起作用。该函数无限调用自身,但查看日志显示它只调用了一次 axios,然后它 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) 轮询服务时也遇到了类似的问题(尽管使用了提取)。我发现使用 "Pragma: no-cache" header 解决了它。
你可以试一试:
const config = {
headers: { Pragma: 'no-cache'},
params: { id: this.state.taskID }
}
调用应如下所示:
axios.get(url.CHECK_UPLOAD_TASK, config).then(...)
谢谢丹尼尔, 那太好了。这个对我有用。 另一种解决方法是在axios.create里面定义如下,这样我们就可以正常使用了。 测试了两种解决方案并且效果很好!
const api = axios.create({
headers: { Pragma: 'no-cache' },
});
当然你必须使用 api.get(...) 而不是 axios.get(...)。
希望对您有所帮助!