为什么$ .get在执行此代码时会延迟?

时间:2019-01-22 15:48:28

标签: jquery sharepoint-online

我有一个使用$.get()的解析器函数中的函数。我在代码中放置了多个alerts,以帮助我了解它在做什么。从这些alerts中可以看出,$.get根本没有执行,直到其他所有内容都执行完为止。有人可以帮助我了解它为什么这样做吗?我想我应该如何使其首先运行?

此代码正在托管并在线运行在sharepoint上。解析的文件也位于同一站点上的联机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.log(arrRaw[i]);
            alert("parser run");
        }
    }, 'text');

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

在下面的代码中,这是alerts弹出的顺序:

  • readCat刚刚运行
  • readCat在返回之前结束
  • 层次结构长度为0
  • 这是对readCat的测试-原始数据长度为xxxx
  • 解析器运行
  • 所以,为什么不去呢:

  • readCat刚刚运行
  • 这是对readCat的测试-原始数据长度为xxxx
  • 解析器运行
  • readCat在返回之前结束
  • 层次结构长度为yyyy
  • 1 个答案:

    答案 0 :(得分:-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.log(arrRaw[i]);
                alert("parser run");
            }
    
            return arrReturn;
        }, 'text')
        .fail(function() {
            return [];
        });
    
        alert("readCat end before return");
        return arrReturn;
    }
    

    您遇到的问题是$.get是异步的,因此您要在返回并处理请求之前执行返回。