L oop JavaScript между началом и концом XMLHttpRequest - PullRequest
0 голосов
/ 12 марта 2020

Я использую XMLHttpRequest для выполнения запроса AJAX, который может занять некоторое время, используя обычный старый Javascript (не jQuery) . Запрос вызывает конечную точку, которая обрабатывает некоторые транзакции.

Я могу проверить статус транзакции через другую конечную точку, но я надеялся «обновить sh» эту информацию на экране, пока асинхронный c AJAX запрос выполняется. Эта транзакция 'progress' также будет GET AJAX запросом.

Я просматривал объект XmlHttpRequest и пытался использовать onprogress, но на самом деле это не так, как я Я ожидаю, что-то вроде while l oop.

В псевдокоде это будет

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'process/', true);
    xhr.send();

    // while request is pending, call another process repeatedly

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                console.log("Request Successful");
            } else {
                console.log("Request Failed");
            }
        } else {
            console.log("Request State changed but not complete");
        }
    }

Я не могу это взломать. Я предполагал, что некоторое время l oop в зависимости от значения соответствующей области может помочь, но не похоже, что аспект asyn c когда-либо обновляет это значение, чтобы сломать l oop.

Я предположил, что это может быть довольно распространенным явлением, например, для индикаторов прогресса и c, но я не могу найти ничего жизнеспособного? Я что-то упускаю из виду?

1 Ответ

0 голосов
/ 12 марта 2020

Как обычно, я понял это вскоре после публикации.

Я установил функцию для вызова каждую секунду, а затем убрал интервал после завершения запроса:

    let intervalId;
    xhr.onloadstart = function (e) {
        intervalId = setInterval(function () {
            myProgressFunction();
        }, 1000)
    };
    xhr.open('GET', '/process', true);
    xhr.send();
    xhr.onloadend = function (e) {
        clearInterval(intervalId);
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...