想检查一下我有一个简单的Web服务资源查询功能吗
//Get country lists
$scope.getCountry = function(){
$http({
method : 'GET',
url : cdnLinks('country'),
}).success(function(data) {
$scope.countries = data;
}).error(function(data) {
console.log(data);
});
};
//Get profile
$scope.getProfile = function(profile_id, select){
var formatJSON = {
profile_id: profile_id,
select: select,
};
var json = JSON.stringify(formatJSON);
var urlsafe = exEncrypt(json);
ProfileService.profileActions.query({payload:urlsafe}).$promise.then(function(datas){
$scope.uProfile = datas[0];
document.querySelector('title').innerHTML = $scope.uProfile.username;
});
};
//Initialize update sequence
$scope.initUpdate = function(profile_id, select){
$scope.getCountry();
$scope.getProfile(profile_id, select);
}
因此,代码的作用是在用户单击“更新”按钮时,它将触发
ng-click="initUpdate(param1, param2)"
函数,该函数随后将加载所有函数并向用户显示必要的信息。此功能可以正常运行,但是存在一个问题。因为getCountry()
通常返回较大的文件大小[〜3-3.5kb,加载时间〜260 ++ ms服务器依赖]与普通getProfile()
[〜1-2 -kb,加载时间〜200 ++ ms服务器依赖],该代码的作用是在加载国家/地区列表之前显示该配置文件,而该国家/地区列表在UI页面中最后会填充一些空白字段。所以我最初要做的是像这样对
getProfile()
应用超时$scope.initUpdate = function(profile_id, select){
$scope.getCountry();
$timeout(function(){
$scope.getProfile(profile_id, select);
}, 200);
}
暂时工作正常,但由于加载部分与服务器有关,因此我无法具体定义要延迟的时间。
我想检查是否有任何我可以使用/实现的方法
所有要加载和完成的必要资源(
getCountry()
,getInterest()
,getABCDEFG()
和其他一些获取...)只有
getProfile()
函数被调用? 最佳答案
您可以使用promise(https://docs.angularjs.org/api/ng/service/ $ q)执行此操作。将$ q依赖项添加到您的控制器,然后在getCountry()和initUpdate()中向我们承诺。
它将继续等待getCountry()请求完成。此外,如果要添加其他请求,可以使用$ q.all()等待多个请求完成,然后再显示配置文件。
$scope.initUpdate = function(profile_id, select){
$scope.getCountry().then(
function(){
$scope.getProfile(profile_id, select);
}
);
}
$scope.getCountry = function(){
var deferred = $q.defer();
$http({
method : 'GET',
url : cdnLinks('country'),
}).success(function(data) {
$scope.countries = data;
deferred.resolve();
}).error(function(data) {
console.log(data);
deferred.reject();
});
return deferred.promise;
};
(注意:您可以通过直接返回$ http promise来改善代码)