AngularJS でプロミスを連鎖させる 質問する

AngularJS でプロミスを連鎖させる 質問する

コントローラーに挿入される paymentStrategy というサービスがあります。

$scope.buy = function() {
  paymentStrategy.buy()
    .then(function(response) {

  }
}

paymentStrategy のこの buy メソッドは、順番に呼び出す必要があるいくつかのメソッドをトリガーします。buy() 内のすべてのメソッドが完了したら、then() を呼び出す必要があります。

おそらく些細なことかもしれませんが、私は Angular にかなり不慣れです。

現時点では、buy().then() は init() メソッドの直後にトリガーされます。これらすべてのメソッドを Promise の配列に入れて、$q.all() を適用する必要があると思います。

ご協力やご提案をいただければ幸いです

angular.module('deps-app.payment.services', []).
  factory('paymentStrategy', function($q) {

 var deferred = $q.defer();
 var ITEM_TO_PURCHASE = "test.beer.managed";
 var promises = [];

 var handlerSuccess = function(result) {
      deferred.resolve(result);
  };

 var handlerError = function(result) {
      deferred.reject(result);
  };

 _init = function() {

     inappbilling.init(handlerSuccess, handlerError, { showLog:true }); 
     return deferred.promise;
    }

  _purchase = function() {
        inappbilling.buy(handlerSuccess, handlerError, ITEM_TO_PURCHASE);
        return deferred.promise;
  }

  _consume = function() {
        inappbilling.consumePurchase(handlerSuccess, handlerError, ITEM_TO_PURCHASE);
        return deferred.promise;
  }

return  {

     buy: function() {

      _init();
        .then(_purchase());
        .then(_consume());  

      return deferred.promise;                    
    }

 }
});

ベストアンサー1

Angular で Promise を順番に連鎖させる必要がある場合は、Promise を 1 つから別の Promise に返すだけで済みます。

callFirst()
.then(function(firstResult){
   return callSecond();
})
.then(function(secondResult){
   return callThird();
})
.then(function(thirdResult){
   //Finally do something with promise, or even return this
});

これらすべてを API として返したい場合は、次のようにします。

function myMethod(){
   //Return the promise of the entire chain
   return first()
           .then(function(){
               return second();
           }).promise;
}

おすすめ記事