这是我的演示代码:

doGet('../loaderDemo/1.lst');
doGet('../loaderDemo/2.lst');
doGet('../loaderDemo/3.lst');
doGet('../loaderDemo/4.lst');
doGet('../loaderDemo/5.lst');

function doGet(filename) {
    $.get(filename,function (data) {
        console.log(data + filename);
    });
}


可能不会按照doGet()的顺序执行“ console.log(...)”行,输出的内容不是按照1.lst-> 2.lst-> 3.lst-> 4的顺序执行。 lst-> 5.lst。

实际上,输出顺序在每次执行中都是随机的。

我怎样才能使其顺序输出?

谢谢你的帮助 :-)

-------------更新-------------------

“ .lst”文件是我要加载的3D模型。我只想按顺序加载模型,以便可以正确渲染动画。那么在这种情况下哪个是最好的解决方案?

每个“ .lst”文件都包含一帧信息。在此演示中,“ console.log()”的输出必须按以下顺序排列:1.lst-> 2.lst-> 3.lst-> 4.lst-> 5.lst,以便我可以处理渲染框架动画。

最佳答案

jQuery $.get返回Promise(各种)

因此,只需进行最少的重写,即可执行以下操作

doGet('../loaderDemo/1.lst')
.then(function() {
    doGet('../loaderDemo/2.lst');
})
.then(function() {
    doGet('../loaderDemo/3.lst');
})
.then(function() {
    doGet('../loaderDemo/4.lst');
})
.then(function() {
    doGet('../loaderDemo/5.lst');
});

function doGet(filename) {
    // added return
    return $.get(filename,function (data) {
        console.log(data + filename);
    });
}


但是,如果下载完成的顺序并不重要,但是“处理”的顺序是-您可以使用jQuery.when“等待”所有下载完成,然后按要求的顺序处理结果

$.when(doGet('../loaderDemo/1.lst'),
    doGet('../loaderDemo/2.lst'),
    doGet('../loaderDemo/3.lst'),
    doGet('../loaderDemo/4.lst'),
    doGet('../loaderDemo/5.lst')
)
.done(function(v1, v2, v3, v4, v5) {
    [].forEach.call(arguments, function(arg) {}
        console.log(arg.data, arg.filename);
    })
});

function doGet(filename) {
    return $.get(filename)
    .then(function(data) {
        // need this so we can access the filename and the data for each result
        return {
            data: data,
            filename: filename
        };
    });
}

关于javascript - javascript $ .get()函数执行时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38888710/

10-13 04:42