반응형
앵귤러와의 체인 약속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
반응형
'source' 카테고리의 다른 글
JavaScript에서 XMLHttpRequest를 사용하여 쿠키(헤더)를 설정하려면 어떻게 해야 합니까? (0) | 2023.02.23 |
---|---|
MongoDB stats() 함수는 비트 또는 바이트를 반환합니까? (0) | 2023.02.23 |
AngularJS 클라이언트 측 데이터 바인딩 및 서버 측 템플릿 생성 (0) | 2023.02.23 |
angularjs는 간단한 카운트다운을 한다. (0) | 2023.02.23 |
ROWID(오라클) - 쓸모가 있습니까? (0) | 2023.02.23 |