Baz*_*nga 3 javascript promise angularjs
在做某事之前,我需要等待两个承诺才能解决.问题是有时我只能根据客户想要的内容发送一个承诺,我需要依靠来自这个$ q.all的结果.如何动态定义变量?
var makePurchaseToResolve = [];
if( CartService.items.draws.length ) {
var drawOrder = {};
drawOrder.price = $scope.getTotal();
drawOrder.paymentMethodId = $scope.payment.paymetMethodId;
drawOrder.orderItems = CartService.items.draws;
drawOrder.payFromBalance = false;
makePurchaseToResolve.push(DrawService.makePurchase(drawOrder));
}
if( CartService.items.hunters.length ) {
var hunterOrder = {};
hunterOrder.paymentMethodId = $scope.payment.paymetMethodId;
hunterOrder.orderItems = CartService.items.hunters;
makePurchaseToResolve.push(HunterService.makePurchase(hunterOrder));
}
$q.all(makePurchaseToResolve).then(function( res ) {
$q.all([HunterService.getPurchase(res[0].data.data),DrawService.getPurchase(res.data.data)]).then(function() {
//here is the problem, because i dont know if i have the two promises to resolve or only one
$scope.hunters = res[0].data.data[0];
$scope.drawOrder = res[1].data.data;
})
}
Run Code Online (Sandbox Code Playgroud)
一个鲜为人知的事实是,$q.all在这种情况下,也可以采用一个对象而不是一个可以简化生活的数组:
var purchases = {}; // an object rather than an array for named properties
if( CartService.items.draws.length ) {
//...
purchases.drawOrder = DrawService.makePurchase(drawOrder); // named assign
}
if( CartService.items.hunters.length ) {
//...
purchases.hunters = HunterService.makePurchase(hunterOrder);
}
// any more additions to the objects here..
$q.all(purchases).then(function(resolved){
// resolve anything further you need
$scope.purchases = resolved; // Add $scope.purchases.hunters etc
});
Run Code Online (Sandbox Code Playgroud)
承诺在一个对象中被解析,因此它们被命名,而不是一个数组,你得到一个具有属性的已解析对象,所以而不是做arr [0],这可能是乱序的,你可以做resolve.hunters或resolved.drawOrder .这个解决方案只是嵌入$ scope范围内并自动完成.
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |