你可以只使用角执行你所要做的是隔离在其他函数在异步调用解决您的问题要回报一个承诺,这个承诺将会为你管理。
让我们用一个例子,让我们说,你有四个异步调用和每个函数调用与授权控制端点,如果用户不具有所有的权限调用是要失败的
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;
});
}
由于到$ q.all需要所有承诺完成令人满意,如果以前的调用失败,因为用户没有权限整个调用将失败,但也许你有兴趣,当一个调用失败只是返回一个空的数组或一个默认的对象,所以你必须为自己处理这种行为,为了达到这个目的,你必须创建一个函数,这个函数负责调用$ 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想,唯一的区别是如果服务失败,我们返回一个空数组。
来源
2017-02-07 15:56:42
JCF
如果失败而不是拒绝,您可以使用空值或无值(未定义)来解析,以便将相应失败值的坐标数组设置为空。 – PSL 2014-09-02 19:42:52