Javascript 仅在angular服务从服务器获取数据并完成其执行后执行特定代码块
在我的服务中:Javascript 仅在angular服务从服务器获取数据并完成其执行后执行特定代码块,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,在我的服务中: appRoot.factory('ProgramsResource', function ($resource) { return $resource('Home/Program', {}, { Program: { method: 'get', isArray: false } }) }); appRoot.controller('ProgramCtrl', function ($scope, ProgramsResource) { $scope.search
appRoot.factory('ProgramsResource', function ($resource) {
return $resource('Home/Program', {}, { Program: { method: 'get', isArray: false } })
});
appRoot.controller('ProgramCtrl', function ($scope, ProgramsResource) {
$scope.searchPrograms = function () {
$scope.Programs = ProgramsResource.get(
{
Name: $scope.searchProgramName,
});
};
$scope.SortBy = "Name";
$scope.searchPrograms();
//Lines of code which I want to execute only after the searchPrograms() completes its execution
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
});
在我的控制器中:
appRoot.factory('ProgramsResource', function ($resource) {
return $resource('Home/Program', {}, { Program: { method: 'get', isArray: false } })
});
appRoot.controller('ProgramCtrl', function ($scope, ProgramsResource) {
$scope.searchPrograms = function () {
$scope.Programs = ProgramsResource.get(
{
Name: $scope.searchProgramName,
});
};
$scope.SortBy = "Name";
$scope.searchPrograms();
//Lines of code which I want to execute only after the searchPrograms() completes its execution
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
});
搜索程序()负责从服务器获取数据。并且仅在第$scope.searchPrograms()行之后我想执行以下代码:
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
但事实并非如此。它不会等待searchPrograms()完成操作并执行下面的代码行。
正如在js中一样,它不会等待ajax完成并执行它下面的行,这正在发生。
为了仅在ajax完成后执行某些代码,js中有回调函数的概念,同样,angular中也有承诺的概念
我对有棱角的承诺非常满意,但我无法理解,在我的情况下,我应该如何准确地使用这些承诺 您可以将回调函数参数添加到ProgramResource.get中:
$scope.searchPrograms = function () {
$scope.Programs = ProgramsResource.get(
{
Name: $scope.searchProgramName,
}, function () {
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
});
};
您应该使用$q和延迟承诺,这样您就可以执行类似的操作
$scope.searchPrograms().then(function(data) { // data is the data that search programs should return
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
}
确保searchPrograms返回承诺
var deferred = $q.defer();
var callback = function (response) {
if(response.error) {
deferred.reject(response.error)
}
deferred.resolve(response);
};
//Your service call that need a callback like myService.request(callback);
return deferred.promise;
因此,当请求完成时,代码将在
中执行。然后(函数(数据){
您使用承诺的方式也在工作,但正如@MajoB所给出的,回调函数似乎更容易。无论如何,感谢您的回答。