使用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) {
会起作用,但没有。我没有简单的想法,在我想出某种鲁布·戈德堡式的杂烩之前,我想我应该问问互联网的智慧,是否有"正确"的方法来做到这一点。
您可以将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
的变化而变化。因此,当成功函数执行时,它仍然处于初始值,并且可以用于填充数组。
只需将数据作为这样的对象
{
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]);
}
}
}
相关文章:
- Javascript-根据赋值顺序,按键合并对象数组
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Mongodb$in以与数组中相同的顺序获取结果
- 从数组中删除重复条目,并在javascript中按顺序排列
- Javascript按数字顺序排序()数组
- Javascript从数组中随机选择并按字母顺序排列
- 按 [field] 值对 javascript 数组进行排序会给出错误的顺序
- Javascript将生日按数组顺序排列
- Javascript - 如何按顺序从数组中挑选随机元素
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- Algo查找深度并在JSON数组中按顺序插入
- 如何使用下划线根据自定义排序顺序对对象数组进行排序
- 当单击按钮时,试图使字符串数组按1乘1的顺序打印出来
- 按数组顺序排列对象
- 如何按顺序执行承诺数组
- 将对象转换为顺序数组格式 - javascript
- AngularJS的顺序数组索引
- Javascript -从对象转到对象时保持键顺序->数组中