Я использую React, Redux, Axios и Thunk. В сокращенном действии приложение выполняет вызов GET для получения данных, но мне нужно отменить его или попросить пользователей посмотреть, хотят ли они отменить его, скажем, через 10 секунд. Я читал об отмене Axios, но не знаю, как это использовать со временем.





С помощью документации от 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.info('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)
//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 ().
Может, это вам поможет!
что .setTimeout() я знаю, что я не знаю, где и как его использовать. не могли бы вы добавить больше информации в свой ответ, спасибо
@CupofJava, не могли бы вы показать мне некоторые кодировки и опубликовать их в качестве ответа? Спасибо большое