我有一个函数接受一个名为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;
});
答案 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);
})