Ich habe einen Service namens PaymentStrategy, die in meinem Controller injiziert werden.Kette verspricht mit AngularJS
$scope.buy = function() {
paymentStrategy.buy()
.then(function(response) {
}
}
Diese Kaufmethode von paymentStrategy löst mehrere Methoden aus, die nacheinander aufgerufen werden müssen. Wenn alle Methoden innerhalb von buy() erledigt sind, muss() aufgerufen werden.
Es ist wahrscheinlich trivial, aber ich bin ziemlich neu zu eckig.
Momentan wird buy(). Then() direkt nach den init() Methoden ausgelöst. Ich habe das Gefühl, wir müssen alle diese Methoden in eine Reihe von Versprechen setzen und $ q.all() anwenden.
Jede Hilfe oder Anregungen wäre sehr
geschätzt werdenangular.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;
}
}
});
Haben Sie alle Methoden auf Inappbilling wie init, buy und consumePurchase Rückgabe Versprechen? – Chandermani
Hört sich gut an, aber kannst du bitte den Weg erklären? –
Das war eine Frage an dich Florent. Das Problem mit Ihrem Code besteht darin, dass Sie das Versprechen beim Init-Callback und bei anderen Callbacks ebenfalls lösen, aber Sie müssen warten, bis alle Anrufe abgeschlossen sind, bevor Sie den Resolve aufrufen. – Chandermani