我正在开发一个 Angular 控制器,在负载时会发出多个异步请求。第一个请求dataA
和dataB
. 如果第一个请求成功并且dataA
被找到,并且基于它的属性我请求dataC
和dataD
. 对于每个请求,我需要使用不同的服务(基于 的服务$http
)。
对于每个请求,我应该在加载时显示一个微调器,处理请求超时的情况(并为该组件提供重试功能)以及处理找不到对象的情况。
在我当前的实现中,我正在初始化一个变量来保存状态值:
$scope.responses = {
dataA: {
loading: true
},
dataB: {
loading: true
},
dataC: {
loading: true
},
dataD: {
loading: true
}
};
我的模板中的相应示例:
<label>dataA (#{{ dataA.id }}) <i class="fa fa-spinner fa-spin" ng-show="responses.dataA.loading"></i></label>
<div ng-show="responses.dataA.success">
<p>{{ dataA.preperty1 }} | {{ dataA.preperty2 }}</p>
</div>
<p class="error-message" ng-show="!responses.dataA.success && !loading.dataA">Failed to load dataA</p>
以及控制器的相应部分:
function loadDataA(property0) {
BackendService.get('dataA/pr0perty0/' + property0).then(function(data) {
$scope.dataA = data;
$scope.responses.dataA.success = true;
if ($scope.dataA.id) {
loadDataC(dataA.id);
loadDataD(dataA.id);
}
}, function() {
$scope.responses.dataA.success = false;
}).finally(function() {
$scope.responses.dataA.loading = false;
});
}
因此,此代码片段仅适用于dataA
,其余部分我必须执行相同的操作(基本上是复制粘贴)。
我还没有添加重试功能,但它已经感觉像是可以提取的东西,并且可能以前已经实现过。
有任何想法吗?