Я работаю над приложением для приема заказов на вынос (с использованием woocommerce API), где заказ будет получен мгновенно. Я создал простую панель инструментов, где отображаются все заказы и получаются новые заказы с помощью API выборки с setinterval.
поэтому, когда пользователь нажимает на заказ, они получают его на панели управления. Появится всплывающее окно модели, где пользователь управляет заказом. но из-за setinterval (для 5s) Модель исчезает, чтобы решить эту проблему, я использую технику для очистки интервала, поэтому, когда пользователь нажимает на очищенный интервал заказа, он не будет запрашивать дальнейшие запросы, пока пользователь не установит порядок в поле Model и не нажмет сохранить кнопка, при сохранении я снова вызываю функцию setinterval
но в этом методе возникает проблема: если setinterval будет выполняться, и пользователь щелкнет по порядку, и поскольку выборка уже запущена и все заказы обновлены, модель исчезнет. поэтому мне нужно снова щелкнуть заказ (см. рисунок) https://postimg.cc/H8267CGd
Итак, я использую AbortController Api, он работает именно так, как я хочу.
AbortController, чтобы прервать запрос асинхронной выборки, после того, как я прервал запрос выборки, он не будет запускаться снова и вместо того, чтобы сообщать об ошибке, операция прервана (Uncaught (в обещании) DOMException: операция была прервана).
Короче говоря, как я могу снова перезапустить запрос API извлечения с помощью AbortController
const controller = new AbortController();
const signal = controller.signal;
function gettingOrders(){
var refreshInterval = setInterval(async function(){
const response = await fetch('index.php',{
method: "GET",
signal: signal,
headers : {
'Content-Type': 'text/html',
'Accept': 'text/html'
}});
try {
const html = await response.text();
var parser = new DOMParser();
var doc = parser.parseFromString(html, "text/html");
var div = doc.getElementById('newOrder').innerHTML;
document.getElementById('newOrder').innerHTML = div;
}
catch(err) {
console.log('error: ', err);
}
}, 5000);
}
gettingOrders();
var sinterval = refreshInterval;
sessionStorage.setItem("sinterval", sinterval);
function abortFetching() {
console.log('Now aborting');
controller.abort();
}