Axios只在内部自调用函数中调用一次(Internet Explorer)

时间:2017-08-23 04:12:11

标签: javascript reactjs internet-explorer axios

我有一个每2.5秒调用一次的函数来检查在后台运行的任务。如果响应是错误,它会将axios调用get一个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
            }
        }
    });
}

2 个答案:

答案 0 :(得分:10)

我在InternetExplorer上遇到过类似的问题(虽然使用fetch)(11,Edge)用于轮询服务。我发现使用" Pragma:no-cache"标题解决了它。

你可以尝试一下:

const config = {
    headers: { Pragma: 'no-cache'},
    params: { id: this.state.taskID }
}

电话应该如下:

axios.get(url.CHECK_UPLOAD_TASK, config).then(...)

答案 1 :(得分:2)

谢谢Daniel, 那太好了。这个对我有用。 还有一个解决方案是你可以在axios.create里面定义如下,我们可以正常使用它。 测试了两种解决方案并且效果很好!

const api = axios.create({
  headers: { Pragma: 'no-cache' },
});

当然你必须使用api.get(...)而不是axios.get(...)。

希望它有所帮助!