Почему $.get задерживается при выполнении этого кода?

У меня есть функция внутри функции анализатора, которая использует $.get(). Я поместил несколько alerts в код, чтобы помочь мне понять, что он делает. Судя по этим alerts, $.get вообще не выполнялся, пока все остальное не было выполнено. Может ли кто-нибудь помочь мне понять, почему он сделал то, что сделал? И я думаю, как я могу заставить его работать первым?

Этот код размещается и запускается на онлайн-ресурсе sharepoint. Разобранный файл также находится в сети общего доступа на том же сайте. Судя по тому факту, что в блоке $.get() отображаются предупреждения, кажется, что файл был извлечен должным образом, просто это не было сделано в нужное время.

// Declared object
var weewee = {};

// Ready
$( document ).ready(function() {
    weewee.catDatapath = "SOME FILE PATH FOR TESTING";
    weewee.catHierarchy = readCat(weewee.catDatapath);
    alert("catHierarchy length is " + weewee.catHierarchy.length);
});

// Actual parse function
function readCat (filePath) {
    var arrReturn = [];
    alert("readCat just ran");

    $.get(filePath, function(data) {
        alert("this is a test for readCat - data length raw is " + data.length);

        var arrRaw = data.split(/\r\n|\n|\r/);

        for (var i in arrRaw) {
            console.info(arrRaw[i]);
            alert("parser run");
        }
    }, 'text');

    alert("readCat end before return");
    return arrReturn;
}

В приведенном ниже коде это последовательность появления alerts:

  • readCat только что побежал
  • конец readCat перед возвратом
  • Длина иерархии равна 0
  • это тест для readCat - необработанная длина данных xxxx
  • запуск синтаксического анализатора
  • Итак, почему не пошло:

  • readCat только что побежал
  • это тест для readCat - необработанная длина данных xxxx
  • запуск синтаксического анализатора
  • конец readCat перед возвратом
  • Длина иерархии гггг
  • get — это асинхронный вызов — для завершения вызова требуется время. Пока вызов завершается, выполняется остальная часть вашего кода. Думайте об этом как о заказе еды. Вы звоните в заведение, делаете заказ, кладете трубку, продолжаете свою жизнь, а через некоторое время ваша еда доставляется (обратный звонок)
    tymeJV 22.01.2019 16:51
    Как конвертировать HTML в PDF с помощью jsPDF
    Как конвертировать HTML в PDF с помощью jsPDF
    В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
    0
    1
    30
    1

    Ответы 1

    Попробуйте обновить readCat до...

    function readCat (filePath) {
        alert("readCat just ran");
        $.get(filePath, function(data) {
            alert("this is a test for readCat - data length raw is " + data.length);
            var arrReturn = [];
    
            var arrRaw = data.split(/\r\n|\n|\r/);
    
            for (var i in arrRaw) {
                console.info(arrRaw[i]);
                alert("parser run");
            }
    
            return arrReturn;
        }, 'text')
        .fail(function() {
            return [];
        });
    
        alert("readCat end before return");
        return arrReturn;
    }
    

    Проблема, с которой вы столкнулись, заключается в том, что $.get является асинхронным, поэтому вы выполняете возврат до того, как запрос будет возвращен и обработан.

    Другие вопросы по теме