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

Javascript AngularJS:将异步数据分配给for循环中的数组元素,javascript,arrays,angularjs,asynchronous,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].redacteurEma

我试图在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;
    });


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


有没有解决这个问题的办法?

我有一个类似的问题,我用 承诺。基本思想是将数组的索引作为参数发送到异步请求回调,然后在响应到达时处理它。
希望能有所帮助。

如果我正确理解您的问题,我相信这可能会奏效

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

这就是我使用的方法。我对Angular还是个新手,但我的理解是,我的数据变成了一个延迟的承诺。作为延期承诺,必须在使用前解决。请有更多经验的人加入进来。

我通过结束对回调函数的调用解决了这个问题。在我的例子中,它看起来是这样的:

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);
}
for(变量i=0;i
和的可能复制品,以及这座托普堡!!你救了我的命!我现在需要阅读有关javascript闭包的内容。非常感谢。我不明白为什么我会有同样的行为。使用函数解决了这个问题。