Angular 在 for 循环中承诺

Angular promise in a for loop

我有一个这样的对象数组:

var  myArray = [{post:{message:"hi",user:"joe"}},{post:{message:"how are you",user:"bob"}}];

其中 myArray[0].post.user = "joe"myArray[1].post.user = "bob"

我想添加另一个键(即 comment)到 post基于在遍历数组时使用 $resource 的异步调用动态添加。

远程 Comments 服务运行良好,如下所示:

.factory('Comments',function($resource, myUrl) {
    var comments = $resource(myUrl + 'api/comments/:postId', {postId: '@id'});
    return comments;
})

在我的控制器中

var  myArray = [{post:{message:"hi",user:"joe"}},{post:{message:"how are you",user:"bob"}}];

var messageCount = myArray.length;
var post_id = 1;   //comes from elsewhere

for (var c = 0; c < messageCount; c++) {

    Comments.get({postId:post_id}).$promise.then(function(comments) {
      console.log(comments);     //  <<---- objects appear to be fine in the console log
      myArray[c].post.comments = comments;  // <---- throws undefined error 

    });
 }

为什么 myArray.post.comments = comments 抛出错误 Cannot set property 'user' of undefined ??

我猜你的问题与 C 变量有关:当调用 "then" 函数时,你的 C 变量(在你的 for 循环中共享)可能已经消失 "onward"。

转发我的评论作为回答