将 Angular 的文件异步加载到对象数组中并保持顺序
Async loading files with Angular into an object array and keeping their order
我没有加载脚本,我正在将 XML 文件读入对象数组。
我的第一次 [愚蠢] 尝试是这样的:
for (var i = 1; i < n; i++) {
var filePath = "xml/chapter_"+i+".xml";
$http.get( filePath ).success(function (data) {
$scope.chaptersData.push (data._chapter);
});
}
我很快发现这不好,因为数组将按照文件 完成 加载的顺序填充,而不是它们开始时(竞争条件)和较小的那些将首先完成。我不能使用 'i' 的值,因为它当然会在任何加载完成之前很久就达到 'n'。
之后我认为 success(function (data, i) {
会起作用,但它没有。我没有简单的想法,在想出某种 Rube Goldberg kludge 之前,我想我会问互联网的智慧是否有 'right' 方法来做到这一点。
像
一样把数据作为一个对象来获取
{
order: [] // just your chapter id or whatever identifier value in desired order
data: // whatever you're getting now
}
在你的 .success 中(顺便说一下,它已经贬值了,你应该使用 .then() 代替)只是做
orderedChapters = [];
for (var i = 0; i < order.length; i++) {
for (var j = 0; j < data.length; i++) {
if (order[i] == data[j].id) {
orderedChapters.push(data[j]);
}
}
}
您可以将 i
传递给执行请求的函数。
for (var i = 1; i < n; i++) {
getFile(i);
}
function getFile(index){
var filePath = "xml/chapter_" + index + ".xml";
$http.get( filePath ).success(function (data) {
$scope.chaptersData[index] = data._chapter;
});
}
在getFile
函数中,参数index
的值不会随着外部函数i
的改变而改变。所以当成功函数执行时它仍然是它的初始值并且可以用于填充数组。
我没有加载脚本,我正在将 XML 文件读入对象数组。 我的第一次 [愚蠢] 尝试是这样的:
for (var i = 1; i < n; i++) {
var filePath = "xml/chapter_"+i+".xml";
$http.get( filePath ).success(function (data) {
$scope.chaptersData.push (data._chapter);
});
}
我很快发现这不好,因为数组将按照文件 完成 加载的顺序填充,而不是它们开始时(竞争条件)和较小的那些将首先完成。我不能使用 'i' 的值,因为它当然会在任何加载完成之前很久就达到 'n'。
之后我认为 success(function (data, i) {
会起作用,但它没有。我没有简单的想法,在想出某种 Rube Goldberg kludge 之前,我想我会问互联网的智慧是否有 'right' 方法来做到这一点。
像
一样把数据作为一个对象来获取{
order: [] // just your chapter id or whatever identifier value in desired order
data: // whatever you're getting now
}
在你的 .success 中(顺便说一下,它已经贬值了,你应该使用 .then() 代替)只是做
orderedChapters = [];
for (var i = 0; i < order.length; i++) {
for (var j = 0; j < data.length; i++) {
if (order[i] == data[j].id) {
orderedChapters.push(data[j]);
}
}
}
您可以将 i
传递给执行请求的函数。
for (var i = 1; i < n; i++) {
getFile(i);
}
function getFile(index){
var filePath = "xml/chapter_" + index + ".xml";
$http.get( filePath ).success(function (data) {
$scope.chaptersData[index] = data._chapter;
});
}
在getFile
函数中,参数index
的值不会随着外部函数i
的改变而改变。所以当成功函数执行时它仍然是它的初始值并且可以用于填充数组。