我有一个函数,它接受一个名为issue
的对象,然后调用一个promise。在执行承诺之前对对象引用做出的任何更改都将反映在原始引用中。之后所做的任何更改都不是。为什么不能,我该如何解决?为什么我的对象在承诺后失去参考?
下面这个例子说明了当你调用
issues.add_comment(issue);
该功能与
return o.update(comment).then(...
其立即返回一个承诺,then()
已执行未结束后的问题
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;
});
承诺是异步的,你访问'它改变 –
之前issue'你不能用'console.log'解决异步代码;在这种情况下,对'console.log(issue.id)'的调用不会被promise阻塞,所以在promise被调用之后立即输出,然后promise会返回并更新数据。 – Claies
忘记在代码示例中包含此代码,编辑 – user7422859