javascript - 使用 Angular 将文件异步加载到对象数组中并保持其顺序

标签 javascript arrays angularjs loading sequential

我没有加载脚本,而是将 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/

相关文章:

php - 为什么我无法在 AngularJS、php 和 MySQL 上的项目上建立 session ?

javascript - 如何在主干或 ember 或任何 javascript MVC 框架中编写简单 jQuery AJAX 调用的等效项,以便我可以对其进行单元测试

javascript - 对象、键值映射到 JSON 数组

c - 为什么C中的这个简单程序崩溃(数组VS指针)

javascript - 通过提示在数组中添加一个新对象

javascript - AngularJS:将base64图像添加到数组

javascript - $scope 上定义的变量直到下一个周期才会更新

javascript - 打字机功能

javascript - Moment js 在警报中显示错误的日期

javascript - 我试图理解这段 TypeScript 代码