Проблема в том, что вы создаете новый Canceltoken в новом поиске и отменяете его вместо исходного.Если вы сохраните исходный код в компоненте Vue, вы можете проверить в newSearch, существует ли он, и только затем отменить.Когда пост «Обещание» завершен, вы снова удаляете источник, поэтому вы не можете отменить его, когда он не нужен (или не возможен).
{
searchItems() {
let filters = {
q: this.query
};
const CancelToken = axios.CancelToken;
this.searchItemsSource = CancelToken.source();
axios.post('/Items/find', filters, {
cancelToken: this.searchItemsSource.token
})
.catch(function(thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
}
})
.then(
response => {
this.searchItemsSource = undefined;
if(this.Items!=null){
response.data.forEach(element => {
this.Items.push(element);
});
}
else
this.Items=response.data;
}
);
},
newSearch(){
if (this.searchItemsSource) {
this.searchItemsSource.cancel('Cancel previous request');
}
this.countItems();
this.searchItems();
},
}
Дополнительная информация об этом коде;Я бы на самом деле перенес отмену предыдущего запроса в метод searchItems, поскольку никогда не имеет смысла иметь два работающих вызова одновременно.Это будет выглядеть примерно так:
{
searchItems() {
let filters = {
q: this.query
};
if (this.searchItemsSource) {
this.searchItemsSource.cancel('Cancel previous request');
}
const CancelToken = axios.CancelToken;
this.searchItemsSource = CancelToken.source();
axios.post('/Items/find', filters, {
cancelToken: this.searchItemsSource.token
})
.catch(function(thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
}
})
.then(
response => {
this.searchItemsSource = undefined;
if(this.Items!=null){
response.data.forEach(element => {
this.Items.push(element);
});
}
else
this.Items=response.data;
}
);
},
newSearch(){
this.countItems();
this.searchItems();
},
}
На этом этапе вы можете спросить себя, нужен ли вообще метод newSearch, вы можете удалить его и переместить вызов countItems в searchItems.Это все зависит от остальной части вашего кода и функциональности, хотя.