我正在使用Angular资源以这种方式从API获取数据:
var getAccountListPerUser = function () {
return $resource(uri, {}, {
get: {
headers: service.getDefaultHeaderRequest(),
method: 'GET',
transformResponse: function (data) {
var accountList = [];
try {
accountList = JSON.parse(data);
} catch (e) {
accountList = [];
}
return accountList;
},
isArray: true,
cache: true
}
}).get().$promise;
};
在我的控制器中,我必须使用它和另外两个以相同方式定义的服务功能。
var promiseResourcesAccountList = usrWebUserService.getAccountListPerUser();
promiseResourcesAccountList.then(function(result){
$scope.usersWithAccountsAndProfiles = result;
var filteredProfiles = [];
for (var account in result) {
...
}
$scope.filteredProfiles = filteredProfiles;
});
和
var promiseResourcesEditUser = usrWebUserService.getResourcesUser(currentUser);
promiseResourcesEditUser.then(function (result) {
usrWebUserFactory.mapBasicPreferences($scope, result);
});
然后另一个非常相似,这个信息加载三个div中的数据,但我想只在所有三个函数都正确完成时显示它们。我想我必须把承诺的结果联系起来。我怎么能这样做?
答案 0 :(得分:1)
您可以将它们链接起来:
#elem{
height: 100vh;
}
或者,您也可以使用$ q.all([promise1,promise2,promise3])。然后(...);
答案 1 :(得分:0)
@terpinmd是对的。链接承诺非常简单。假设你有一个带有“getWidgets”的服务,它返回一个promise,你想使用该服务的响应来调用另一个服务,“getWidgetOwners”将返回另一个promise:
假设
如何:
service.getWidgets() .then(function(widgets) { return widgets.map(function(widget) { // extract ownerIds return widget.ownerId; }); }) .then(service.getWidgetOwners) // pass array of ownerId's to .then(function(owners) { // the next service console.log(owners); });