2016-04-08 4 views
0

私の第二の約束は、第一約束に依存していたので、UIが壊れていました。したがって、私は第二約束をしたので、同様に第一約束でそれを入れ子になった:

csRepo.getSet(setID).then(
     function (val) { 
      $scope.dataSet= val; 

      csRepo.getInfoInSet(setID).then(
       function (val) { 
       $scope.dataSet.InfoOfSet = val; 
       $scope.$apply(); 
       }) 
       .catch(function (reason) { 
       throw "getInfoSet:" + reason; 
       }); 
      $scope.$apply(); 
     }) 
     .catch(function (reason) { 
      throw "getSet() :" + reason; 
     }); 

これは仕事をしましたが、私は、ベストプラクティスは、一緒に「その後、」チェーン2にあると信じています。これは本当ですか?そうすれば誰かが私のコードサンプルをリファクタリングしてこれを表示できますか?ありがとう!

答えて

0

あなたの例では、setIDは、関数呼び出しの閉鎖から入手可能ですが、あなたが唯一のcsRepo.getSetcsRepo.getInfoInSetを呼び出したい場合は、このようにそれを行うことができ、独立して、両方のメソッドを呼び出すことができます。

csRepo.getSet(setID).then(
    function (val) { 
     $scope.dataSet= val; 
     return setID; 
    }) 
    .then(csRepo.getInfoInSet) 
    .then(function (val) { 
     $scope.dataSet.InfoOfSet = val; 
    }) 
    .catch(function (reason) { 
     throw reason; 
    }) 

あなたは毎回$scope.$applyに電話する必要はありません。パフォーマンスにも影響があります。 $q.allを使用すると、両方のメソッドを並列に呼び出して、約束を組み合わせることができます。これを参照してください:https://docs.angularjs.org/api/ng/service/ $ q

+0

getInfoInSet(setID)setIDを取得する方法は? – MilesMorales

+0

それは 'then'の連鎖のためです。以前の 'then'の戻り値は、次のコールバックのパラメータです。また、あなたの問題を解決した場合、答えを受け入れてください:) –

+0

$ scopeを適用できるのは、$ q.allを使用していない場合、えええええええええええええええ。 – MilesMorales

関連する問題