Я использую Angular Resourse для получения моих данных из 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, но я хочу показать их только тогда, когда все три функции выполнены правильно. Думаю, мне нужно связать результат обещаний. Как я могу это сделать?
Вы можете связать их так:
promiseResourcesAccountList.then(function(result){
///whatever processing
//return a promise
return promiseResourcesEditUser()
}).then(function(){
return anotherPromise();
}).then(function(){
//update scope here
});
альтернативно, вы также можете использовать $ q.all([обещание1, обещание2, обещание3]), затем (...);
@terpinmd верен. Цепочные обещания довольно просты. Скажем, у вас есть служба с "getWidgets", которая возвращает обещание, и вы хотите использовать ответ от этой службы для вызова другой службы "getWidgetOwners", которая вернет другое обещание:
Предположения
Как:
service.getWidgets() .then(function(widgets) { return widgets.map(function(widget) { // extract ownerIds return widget.ownerId; }); }) .then(service.getWidgetOwners) // pass array of ownerId to .then(function(owners) { // the next service console.log(owners); });
Promise.all([array of your promises])
. Здесь документация.