私はissue
というオブジェクトを受け取り、約束を呼び出します。約束が実行される前にオブジェクト参照に加えられた変更は、元の参照に反映されます。それ以外の場合は変更されません。どうして私はそれを修正できますか?約束の後に私のオブジェクトが参照を失うのはなぜですか?
以下この例では、
issues.add_comment(issue);
を呼び出すと、その関数がthen()
が実行されていない後、すぐに約束を返し
return o.update(comment).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;
});
約束は非同期であり、それはあなたが非同期コードのトラブルシューティングを行うには、 'console.log'を使用することはできません –
を変更する前に、あなたは' issue'にアクセスします。この場合、 'console.log(issue.id)'の呼び出しはpromiseによってブロックされないので、promiseが呼び出された直後に、promiseが返ってデータを更新する前に出力されます。 – Claies
これをコードサンプルに含めるのを忘れました、編集済み – user7422859