source

앵귤러와의 체인 약속JS

gigabyte 2023. 2. 23. 22:51
반응형

앵귤러와의 체인 약속JS

컨트롤러에 paymentStrategy라는 서비스가 있습니다.

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

  }
}

이 paymentStrategy로부터의 구매방법은 순차적으로 호출해야 하는 몇 가지 방법을 트리거합니다.buy() 내의 모든 메서드가 완료되면()를 호출해야 합니다.

아마 사소하지만 나는 각도에는 꽤 익숙하지 않다.

현재 buy().then()은 init() 메서드 직후에 트리거됩니다.이 모든 방법을 일련의 약속에 넣고 $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;                    
    }

 }
});

Angular에서 약속을 순차적으로 연결해야 하는 경우 약속을 서로 반환하기만 하면 됩니다.

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;
}

각각의 약속을 추가하여 모든 방법을 만들어라.당신의 코드로, 첫 번째resolve모든 요청이 완료됩니다.

그 방법들에 대한 전망이 있다면, 당신은 쉽게 그것들을 묶을 수 있습니다.

angular.module('deps-app.payment.services', []).factory('paymentStrategy', function($q) {
var ITEM_TO_PURCHASE = "test.beer.managed";

_init = function() {
  return $q(function (resolve, reject) {
    inappbilling.init(resolve, reject, { showLog: true }); 
  });
};

_purchase = function() {
  return $q(function (resolve, reject) {
    inappbilling.buy(resolve, reject, ITEM_TO_PURCHASE);  
  });
};

_consume = function() {
  return $q(function (resolve, reject) {
    inappbilling.consumePurchase(resolve, reject, ITEM_TO_PURCHASE);
  });
};

return  {
  // In this case, you don't need to define a additional promise, 
  // because placing a return in front of the _init, will already return 
  // the promise of _consume.
  buy: function() {    
    return _init()
      .then(_purchase)  
      // remove () from inside the callback, to pass the actual method 
      // instead the result of the invoked method.
      .then(_consume);      
  }    
};

});

언급URL : https://stackoverflow.com/questions/24357445/chain-promises-with-angularjs

반응형