0

我正在尝试在 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++)。然后将接收到的数据分配给一个不存在的对象。

任何想法解决这个问题?

4

3 回答 3

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);
}
于 2013-12-03T09:08:27.803 回答
0

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

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

这是我使用的方法。我对 Angular 还是很陌生,但我的理解是 myData 变成了一个延迟承诺。作为延迟承诺,它必须在使用前解决。请有更多经验 Angular 和延迟承诺的人加入。

于 2013-11-15T08:03:54.870 回答
0

I had a similar issue, and I solved it by using Promises. The basic idea is that I send the index of the array as a parameter to my asynchronous request callback, and then I can handle it when the response arrives. Hope that helps.

于 2013-11-15T01:52:58.707 回答