为什么我的对象在承诺后失去参考?

时间:2017-04-11 20:54:23

标签: angularjs

我有一个函数接受一个名为issue的对象,然后调用一个promise。在执行promise之前对对象引用所做的任何更改都将反映在原始引用中。之后所做的任何更改都不是。为什么不,我该如何解决?

下面的示例说明了问题

angular.module('app').controller('IssueCtrl',['issues', function(issues){
   var issue = {};
   issue.id=1;
   issues.add_comment('test', issue).then(function(issue){
       console.log(issue.id);
   }
   // returns 'a'
}
]);


angular.module('app').factory('issues', function(){
  o.add_comment = function (comment, issue) {
      // Changes made before promise are reflected in original promise
      issue.id='a'
    return o.update(comment).then(function(new_comment){
      // Changes made after promise are not reflected in original promise
      issue.id = 'b'
      return new_comment
  }

  o.update=function(){
      // more code
  }
 return o;
});

2 个答案:

答案 0 :(得分:1)

致电时

issues.add_comment(issue);

该功能以

结尾
return o.update(comment).then(...

立即返回一个承诺,而不是then()执行后。如果你想等待,你必须在原来的电话中这样做:

issues.add_comment(issue).then(....

答案 1 :(得分:1)

这里的问题在于控制器中的行:

issues.add_comment('test', issue).then(function(issue){
   console.log(issue.id);
}

服务正在返回一个promise对象,最终返回new_comment。您正在覆盖函数签名中的原始issue。尝试这样的事情:

issues.add_comment('test', issue).then(function(resp){
   console.log('inside then', issue.id);
   console.log('then response', resp);
})

Working Example