这是我的演示代码:
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/