我正在尝试在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++
)。然后将收到的数据分配给不存在的对象。
是否有解决此问题的想法?
答案 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成为延迟的承诺。作为延期承诺,必须在使用前解决。拜托,有更多经验的角度和延期承诺的人会加入。