AngularJS:将异步数据分配给for循环中的数组元素

时间:2013-11-14 16:06:02

标签: javascript arrays angularjs asynchronous

我正在尝试在for循环中分配数组元素,并调用ngResource动作的异步结果。

for ( var i = 0; i < projs.length; i++) {
    $scope.projets[i].redacteur = new Object(); // the Object where the result will be stored
    var param = new Object();
    param.email = projs[i].redacteurEmail;
    Agent.read(param, function(data) {
        $scope.projets[i].redacteur = data;
    });


}

问题是:当执行回调函数时(收到数据时),i超出范围(它通过了最后i++)。然后将收到的数据分配给不存在的对象。

是否有解决此问题的想法?

3 个答案:

答案 0 :(得分:2)

我通过在闭包中调用回调函数来解决了这个问题。在我的例子中,它看起来像:

for (var i = 0; i < projs.length; i++) {
    $scope.projets[i].redacteur = new Object(); // the Object where the result will be stored
    var param = new Object();
    param.email = projs[i].redacteurEmail;
    (function(i) {
        Agent.read(param, function(data) {
            $scope.projets[i].redacteur = data;
        });
    })(i);
}

答案 1 :(得分:0)

我有类似的问题,我通过使用解决了它 承诺。基本的想法是我将数组的索引作为参数发送到我的异步请求回调,然后我可以在响应到达时处理它。 希望有所帮助。

答案 2 :(得分:0)

如果我理解你的问题,我相信这可行。

myData = Agent.read(param, function() {
    $scope.projets[i].redacteur = myData;
});

这是我使用过的方法。我还是Angular的新手,但我的理解是myData成为延迟的承诺。作为延期承诺,必须在使用前解决。拜托,有更多经验的角度和延期承诺的人会加入。