У меня есть функция внутри функции анализатора, которая использует $.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
до...
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
является асинхронным, поэтому вы выполняете возврат до того, как запрос будет возвращен и обработан.
get
— это асинхронный вызов — для завершения вызова требуется время. Пока вызов завершается, выполняется остальная часть вашего кода. Думайте об этом как о заказе еды. Вы звоните в заведение, делаете заказ, кладете трубку, продолжаете свою жизнь, а через некоторое время ваша еда доставляется (обратный звонок)