【发布时间】:2014-08-12 23:49:37
【问题描述】:
我有一个名为 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;
}
}
});
【问题讨论】:
-
init、buy、consumePurchase等inappbilling的所有方法都返回promise吗?
-
听起来不错,但您能说明一下方法吗?
-
这是向你提出的问题 Florent。您的代码的问题是您在 init 回调和其他回调上也解决了 Promise,但是您需要等待所有调用完成,然后再调用 resolve。
-
前两个参数 handlerSuccess 和 handlerError 是在方法(init、buy 和 consumePurchase)完成时调用的回调。即,仅当调用了 init(...) 中的 handlerSuccess 时才需要调用 _purchase()。 _consume 仅在调用了 purchase(...) 中的 handlerSuccess 时才需要调用。
标签: javascript angularjs promise chaining