コントローラーに挿入される 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;
}