@pavelpasha

Как дождаться ответа функции?

Если произошла ошибка при отправке данных, то данные сохраняются в локальном хранилище, и запускается функция с тайм аутом 30сек, отправляющая ожидающие данные. В блоке с ошибкой снова вызывается эта функция. Таким образом получается что каждые 30 сек идет попытка отправки, до тех пор, пока все не будет передано.
Но есть одно но: функция вызывается столько раз, сколько элементов содержится в хранилище. В общем много.
function DelayResend() {
      
                for (var key in localStorage) {                   
                       resend1(key);
                       if (resend1(key) == false) {
                           setTimeout(DelayResend, 30 * 1000);
                           break;
                       }
                    }
            
            }


function resend1(key) {
                var message;
                $.ajax({

                    type: 'POST',
                    url: '/Home/Form',
                    data: xml,

                    success: function (responce) {
                        xml = UnsucessStorage.getItem(key);
                        var sub = key.substr(1);
                        message = "Данные ожидающие отправки были успешно переданы";
                        if (key.includes("u")) {
                            UnsucessStorage.setItem("s" + sub, xml)
                            localStorage.removeItem(key);
                            notification(message);
                        }

                    },
                    error: function (xhr, str) {              
                        return false; 
                    }
                })
                
            }

Это происходит потому-что ajax запрос не успевает ответить. Как можно заставить цикл дождаться ответа?
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 3
@vesulebiv
Нельзя вернуть из функции результат асинхронной операции, т.к. она происходит в отдельном потоке.
Передаввайте callback или используйте промисы.
Ответ написан
@alexmixaylov
параметру async выставите значение false
потому что по умолчанию $.ajax имеет значение true
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
babel (stage-3) + async/await = можно писать асинхронные вещи в синхронном стиле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы