2016-10-26 6 views
0

プロミス1とプロミス2の違いは何ですか?第1のものは$$状態のプロパティのみを持ち、第2のものはさらにエラーと成功のコールバックを持っています。彼らはなぜ異なっているのですか?角度プロミスオブジェクトの違い

<div ng-app="app"> 
<div ng-controller="TodoCtrl"> 

    </div> 
</div> 




angular.module('app', []) 
.controller('TodoCtrl', function ($scope, $http) { 
//promise 1  
console.log('p1',$http.get("/echo/json/").then(
    function(){ console.log('s1',arguments); }, 
    function(){ console.log('e1',arguments); } 
) 
); 

var p = $http.get("/echo/json/"); 
//promise 2 
console.log('p2',p); 
p.then(
    function(){ console.log('s2',arguments);}, 
    function(){console.log('e2',arguments);}); 
} 
); 

コンソールログは言う:あなたの最初のケースで

p1 Promise { $$state: Object } 
    $$state: Object 
    __proto__: Object 
p2 Promise { $$state: Object } 
     $$state: Object 
     error: (fn) 
     success: (fn) 
     __proto__: Object 
+1

console.log出力を提供できますか? –

+0

@BenBrachaの2番目のPromiseオブジェクトには2つの追加コールバックがあります – thadam

答えて

0

を、あなたは( "/エコー/ JSON /")$ http.get呼び出す約束を返します。その後、この約束(新しい約束を返す)をコールバックする「then」メソッドを適用した後、コンソール出力が実行されます(そして、あなたはこの新しい約束を持っています)。コールバック関数は、実際の結果が戻ったときに実行されます。 2番目のケースでは、プロミスを作成し、それをログに記録します(最初に作成したプロビジョニングとして、それ以上はコールバックなし)。その後、コールバックを使用してプロミスに「then」メソッドを適用します。この場合も、結果を受け取った後にコールバック関数が実行されます。 Promise API documentationに説明があります。

+0

なぜ "then"によって作成された最初の "新しい約束事"には成功とエラーのコールバックがなく、2番目のコールバックがありますか?それは設計によるものか、それとも別の違いがありますか?私はこの2つの約束が同じインターフェースを持っているべきだと思っていたのか、それともよく分からないのだろうと思っていたのですか? – thadam

+0

Angularのどのバージョンをお使いですか?以前のバージョン(参照用1.3)では、$ http.getは "$ http特定のメソッドを2つ使用して約束しました:成功とエラー"を返しました。 (詳細については、公式ドキュメントを参照してください:http://devdocs.io/angularjs~1.3/api/ng/service/%24http)。これらのメソッドは、コンソールに正確に表示されます。古いバージョンでは廃止予定です。このディスカッションをご覧ください:https://github.com/angular/angular.js/issues/10508 –

関連する問題