Denetleyicime enjekte edilen paymentStrategy adlı bir hizmetim var.AngularJS
$scope.buy = function() {
paymentStrategy.buy()
.then(function(response) {
}
}
PaymentStrategy'den alınan bu satın alma yöntemi, sırayla çağrılması gereken çeşitli yöntemleri tetikler. Buy() içindeki tüm yöntemler tamamlandığında, o zaman() çağrılmalıdır.
Muhtemelen önemsiz ama ben açısal olarak oldukça yeniyim.
Şu anda satın al(). Sonra(), init() yöntemlerinden sonra doğrudan tetiklenir. Tüm bu yöntemleri bir dizi vaatte yerine koymamıza ve $ q.all() uyguladığımızı hissediyorum.
callFirst()
.then(function(firstResult){
return callSecond();
})
.then(function(secondResult){
return callThird();
})
.then(function(thirdResult){
//Finally do something with promise, or even return this
});
Ve eğer: Herhangi bir yardım veya öneri büyük ölçüde Açısal sırayla zincir vaat gerekiyorsa, sadece birinden diğerine sözler dönebilirsiniz
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;
}
}
});
Tüm init, in, satın alma ve tüketme gibi geri alma vaadiyle geri alma vaadini nasıl yapar? – Chandermani
Kulağa hoş geliyor ama bunu yapmanın yolunu açıklayabilir misiniz? –
Bu sana bir soru oldu Florent. Kodunuzdaki sorun, init geri aramada ve diğer geri aramalarda da söz konusu sorunu çözmenizdir, ancak tüm çağrıların çözülmeden önce bitmesi için beklemeniz gerekir. – Chandermani