我正在使用React,Redux,Axios和Thunk。在一次Redux操作中,该应用程序进行了GET调用以接收数据,但是我需要取消它,或者要求用户查看是否要在10秒后取消它。我读过有关Axios取消的信息,但不知道如何及时地使用它。
答案 0 :(得分:0)
通过Axios的文档,我们可以合并setTimeout
来检查我们要取消的承诺状态
编辑:看来没有标准来检查诺言是否已解决,因此您可以执行以下操作:
在这里我们可以检查诺言是否已定义
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get('/user/12345', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// handle error
}
});
const callPromise = axios.post('/user/12345', {
name: 'new name'
}, {
cancelToken: source.token
})
// cancel the request by checking the promise
setTimeout(() => {
if(!callPromise){
source.cancel('Operation canceled by the user.');
}
}, 10000)
我们还可以设置一个外部变量,该变量将在解决诺言后设置
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
let isResolved = false;
axios.post('/user/12345', {
name: 'new name'
}, {
cancelToken: source.token
}).then(res => {
isResolved = true;
})
// cancel the request by checking the promise
setTimeout(() => {
if(!isResolved){
source.cancel('Operation canceled by the user.');
}
}, 10000)
答案 1 :(得分:0)
//this statement your axious get
state = {data: [] };
componentWillMount(){
axios.get('https://yourwebsite.com')
.then(Response => this.setState({ data: Response.data}));
}
//this statement for your setTimeout() function
setTimeout(() => {
if(callPromise.isResolved()){
data.cancel('Canceled');
}
}, 15000)
然后您需要 data.setTimeout()功能。
也许会对您有帮助!