在我的 Angular 项目中,我有一个返回产品数组的 Promise:
{"Products":[{"Code":123},{"Code":456}]}
然后对于每个产品代码,我必须调用另外两个分别返回价格和数量的承诺。
我使用 ui-router,我当前的解析中的实现代码如下:
$stateProvider.state('root.products', {
abstract: true,
url: '/products',
template: '<div data-ui-view=""></div>',
resolve: {
products: ['ProductsService', function (ProductsService) {
return ProductsService.getProducts()
.then(function (response){
var data = response.data;
return data.Products.map(function (product) {
var viewModelProduct = {};
angular.copy(product, viewModelProduct);
//get Price for Each Product
ProductsService.getPrice(product.Code)
.then(function (response) {
viewModelProduct.Price = response.data.Info.Price;
})
//get Quantity for Each Product
ProductsService.getQuantity(product.Code)
.then(function (response) {
viewModelProduct.Quantity = response.data.Info.Quantity;
})
return viewModelProduct;
});
});
}]
}
})
它有效,但我的问题是我是否可以写得更好。我阅读了有关使用的信息$q
,$q.all
但我真的不知道如何使用它们。有什么办法可以编写上面的代码,更好,更安全?
在此先感谢您的帮助!