我没有加载脚本,而是将 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 之前戈德堡拼凑 我想我应该问问互联网的智慧是否有“正确”的方法来做到这一点。
最佳答案
您可以将 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
的变化而变化。因此,当 success 函数执行时,它仍将处于其初始值,并且可用于填充数组。
关于javascript - 使用 Angular 将文件异步加载到对象数组中并保持其顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34183612/