Przerwanie skryptu przy requeście

1

Witajcie!

Mam skrypt, który sprawdza n elementów na liście i wykonuje zadanie na każdym z nich.

for (let i = 0; i < items_count; i++) {
  await doSomething(items[i]);
}

function doSomething(item)
{
  let res = $.ajax({
    'url': url,
    'dataType':'html',
    'type':'POST',
    'success':function(data){},
    error: function(jqXHR, exception) {
      if (jqXHR.status === 0) {
          alert('Brak połączenia - sprawdź internet.');
      } else if (jqXHR.status == 404) {
          alert('Nie odnaleziono strony. [#404]');
      } else if (jqXHR.status == 500) {
          alert('Błąd serwera [#500].');
      } else if (exception === 'parsererror') {
          alert('Żądane parsowanie JSON nie powiodło się [#parsererror].');
      } else if (exception === 'timeout') {
          alert('Przekroczono limit czasu [#timeout]');
      } else if (exception === 'abort') {
          alert('Żądanie ajax zostało przerwane. [#abort]');
      } else {
          alert('Nieznany błąd. ' + jqXHR.responseText);
      }
    }
  });
  return let;
}

Czasami na ajaxie dostaję error i skrypt pada.
Czy istnieje rozwiązanie, że po takim błędzie skrypt leci dalej?

1

W przypadku błędu z api możesz owinąć wszystko w try { ... } catch { ... }

for (let i = 0; i < items_count; i++) {
  try {
    await doSomething(items[i]); 
  } catch (error) {
    console.error(error);
  }
}
0

I mimo błędu, for poleci dalej?

0
RafiDS napisał(a):

I mimo błędu, for poleci dalej?

Tak, funkcja zostanie przerwania i zostanie wykonany fragment z catch

try {
  // ...
}
catch (error) {
  console.error(error); // <--
}
0

Ok, to testuję i zobaczymy czy to zda egzamin.

0
RafiDS napisał(a):

Czasami na ajaxie dostaję error i skrypt pada.
Czy istnieje rozwiązanie, że po takim błędzie skrypt leci dalej?

A może byś napisał jaki error?

Nie mówiąc o tym że:

  • await możesz użyć tylko w funkcji która jest async
  • W ostatniej linijce masz return let;, to w ogóle jest language error; nie powinno być return res;?
0
Riddle napisał(a):

A może byś napisał jaki error?

W pierwszym wątku w komentarzu jest: 504 - Gateway Time-out , ale chcę się zabezpieczyć przy okazji innych errorów.

Riddle napisał(a):

Nie mówiąc o tym że:

  • await możesz użyć tylko w funkcji która jest async
  • W ostatniej linijce masz return let;, to w ogóle jest language error; nie powinno być return res;?

Zgadza się, poprawiłem ten return. :)
For jest w funkcji async - tu skróciłem kod.

Zastosowałem rozwiązanie od @Xarviel i póki co działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1