【发布时间】:2015-06-10 23:24:34
【问题描述】:
我目前正在尝试寻找一种最佳实践,以便在返回第一个函数时多次调用 $resource。
考虑以下架构:我们有一个作者数据库,其中有书籍,有多个标签(科幻、惊悚、恐怖、...)。
angular.module('myApp',[ngResource])
.controller('myCtrl',['$scope', function($scope){
$scope.results = [];
apiService.Authors.getAll().$promise //return array of authors
.then(function(authors){
$scope.results.push(authors);
angular.forEach(authors,function(akey,author){
apiService.BooksBy.getAll({authorID:author.id}).$promise //return array of books
.then(function(books){
$scope.results[akey].books = [];
$scope.results[akey].books.push(books);
angular.forEach(books,function(bkey,book){
apiService.Tags.getAll({bookID:book.id}).$promise //return array of tags
.then(function(tags){
$scope.results[akey].book[bkey].tags = [];
$scope.results[akey].book[bkey].tags.push(tags);
});
});
});
});
});
}]);
这是进行多个嵌套调用的唯一方法吗?
我在想一些更扁平化和更具可读性的东西,比如使用链式承诺的解决方法。
欢迎任何想法,因为我无法找到更好的方法。
问候!
【问题讨论】:
-
您的 api 是否返回带有“外键”的数据?也就是说,如果您要将一堆
Tags.getAll().$promise捆绑到一个数组中并传递给$q.all([]),您将获得一个已解决结果的数组,其顺序与您添加承诺的顺序相同。但是,如果这些数组元素中的每一个元素中的数据不包含标识请求所针对的书的外键,那么如果您没有嵌套和跟踪这些结果,那么将结果与正确的书正确关联可能仍然很棘手闭包中的键... -
不幸的是没有。基础中没有外键。感谢您的回复。
标签: angularjs angularjs-resource angular-promise