вы можете решить вашу проблему, используя только реализацию углового, что вы должны сделать, это изолировать асинхронные вызовы в другой функции, собираюсь возвратить обещание, и это обещание будет у вас для вас.
Давайте использовать пример, скажем, что у вас есть четыре асинхронных вызовов и каждый вызов функции конечной точки с контролем авторизации, если пользователь не имеет все разрешения на вызов происходит сбой
function getAllCatalogs() {
return $q.all([
$http.get(baseUrl + 'equipment-design/'),
$http.get(baseUrl + 'engines-design/'),
$http.get(baseUrl + 'suspension-design/'),
$http.get(baseUrl + 'artifacts-design/')
]).then(function (data) {
return data;
});
}
Due до $ q.всего нужно, чтобы все обещания заканчивались удовлетворительно, если один из предыдущих вызовов завершился неудачей из-за того, что пользователь не имеет разрешений, что весь вызов будет терпеть неудачу, но, возможно, вас интересует, когда вызов не дает просто вернуть пустой массив или объект по умолчанию, поэтому вам нужно обработать это поведение для себя, для этого вам нужно создать функцию, которая отвечает за вызов $ http.get обслуживать и управлять тем, как обещание будет возвращено после отказа или успеха вызова, в этом примере давайте назовем эту функцию getCatalogPromise и в ее параметрах будет URL-адрес службы, код будет:
function getCatalogPromise(url) {
var deferred = $q.defer();
$http.get(url).then(function (response) {
deferred.resolve(response)
}, function() {
deferred.resolve([]);
})
return deferred.promise;
}
function getAllCatalogs() {
return $q.all([
getCatalogPromise(baseUrl + 'equipment-design/'),
getCatalogPromise(baseUrl + 'engines-design/'),
getCatalogPromise(baseUrl + 'suspension-design/'),
getCatalogPromise(baseUrl + 'artifacts-design/')
]).then(function (data) {
return data;
});
}
, если вы обратите внимание на код getCatalogPromise это does'n важно, что обратный вызов к службе нашей отсроченной всегда будет в состоянии разрешить и это то, что $ q.all хотят, единственная разница заключается в том, что если сбой службы, мы возвращаем пустой массив.
В случае отказа вместо отклонения вы можете разрешить с нулевым значением или неопределенным (неопределенным), чтобы вы получили массив совпадений с соответствующим неудачным значением как null. – PSL