Я обращаюсь к вам, чтобы получить помощь по проблеме $ обещание с AngularJS.Угловой JS успех обратный вызов
Вот информация документация на $ ресурсе, и это будет применимо к $ HTTP, а также
Сказав, что я пытаюсь сделать вызов API и успеха требуется выполнить обратный вызов действие. Поскольку операция выполняется асинхронно, действие обратного вызова происходит еще до завершения завершения вызова API. Это приводит к некорректному отражению данных. Вот простой пример, используя $ resource и $ http. В обеих случаях фактическое ожидание, что лог консоли должен показать фактические данные, но он показывает данные обещания и в результате функции обратного вызова вызывался даже до того, как API вызовы получить завершено
$http.get('../../../Employee/GetEmployees').success(function (data) {
console.log(data);
});
return $resource('../../../Employee/GetEmployees', {},
{
query: { method: 'GET', isArray: true },
});
я представил пример просто для получения четкой картины, но моя фактическая проблема связана с «PUT» (Update). Согласно логике, обновление должно проходить сначала через вызов API, а затем страница должна быть перенаправлена на страницу списка, где будут обновляться и обновляться обновленные данные. Любые рекомендации по этому вопросу будут очень признательны.
$scope.UpdateEmp = function() {
var empl = $scope.Employee;
empFactory.empUpdate.update({ EmpID: $routeParams.EmpID, empval: empl }).$promise.then(function() { // update method in my resource uses $resource
$location.path('/EmpList'); //redirect to list
});
P.S: Для поры до времени, пожалуйста, оставьте о URL, пожалуйста, представить его в качестве API, который возвращает объект JSON.
Вот полный код
Вот полный код.
Routing:
var myApp = angular.module('myApp', ['emp', 'ngRoute']);
myApp.config(function ($routeProvider) {
$routeProvider
.when('/',
{
templateUrl: 'pages/EmpList.html',
controller: 'empController'
}
)
.when('/EmpDetail/:EmpID',
{
templateUrl: 'pages/EmpDetail.html',
controller: 'empDetailController'
}
)
.when('/EmpList',
{
templateUrl: 'pages/EmpList.html',
controller: 'empController'
}
)
.when('/EmpCreate',
{
templateUrl: 'pages/EmpCreate.html',
controller: 'empCreateController'
});
});
Вот метод контроллера
myApp.controller('empController', function ($scope, $routeParams, $location, empFactories, empFactory, $http, empHttpFactory) {
$scope.Employees = empFactories.query();
$scope.edit = function (EmpID) {
$location.path('/EmpDetail/' + EmpID);
};
$scope.Delete = function (empID) {
empFactory.empDelete.del({ EmpID: empID }, function() {
$location.path('/EmpList');
});
}
$scope.Createnew = function() {
$location.path('/EmpCreate');
}
});
myApp.controller('empDetailController', function ($scope, empFactory,empFactories, $routeParams, $location) {
$scope.Employee = empFactory.employee.show({ EmpID: $routeParams.EmpID });
console.log($scope.Employee);
$scope.UpdateEmp = function() {
var empl = $scope.Employee;
empFactory.empUpdate.update({ EmpID: $routeParams.EmpID, empval: empl }).$promise.then(function() { // update method in my resource uses $resource
$location.path('/EmpList'); //redirect to list
});
};
});
Here is the service
var myservice = angular.module('emp', ['ngResource', 'ngRoute']);
myservice.factory('empFactories', function ($resource) {
return $resource('../../../Employee/GetEmployees', {},
{
query: { method: 'GET', isArray: true },
create: { method: 'POST' }
});
});
myservice.factory('empFactory', function ($resource) {
//return $resource('../../Employee/GetEmployee/:EmpID', { EmpID: '@EmpID' },
// {
// show: { method: 'GET' }
// });
var resource = {
employee:
$resource('../../Employee/GetEmployee/:EmpID', { EmpID: '@EmpID' },
{
show: { method: 'GET' }
}),
empUpdate:
$resource('../../Employee/PutEmployee/:EmpID', { EmpID: '@EmpID', empval: '@empl' }, { update: { method: 'PUT', isArray: true } }),
empDelete:
$resource('../../Employee/DeleteEmployee/:EmpID', { EmpID: '@EmpID' }, { del: { method: 'DELETE', isArray: true } }),
empCreate:
$resource('../../Employee/CreateEmployee', { empval: '@empl' }, { create: { method: 'POST', isArray: true } })
}
return resource;
});
возможность отправлять полный код или проверить запрос & ответ от инструментов разработчика Вы? Мне было странно, что успех заработал до получения ответа. – kwangsa
Для метода get я проверяю в консоли консоли разработчика инструменты .. Для метода Put, как я уже сказал, ожидалось, что «перенаправление должно произойти после обновления». Я использовал аналогичное условие onsuccess для Put так же хорошо, как вы могли видеть в моем примере – TechQuery
Я знаю, что вы пытаетесь держать вопрос кратким, но мне трудно понять, как вызов '$ http' связан с' return $ resource() '- это просто альтернативы в вашем API? И как оба связаны с вызовом, сделанным в функции «UpdateEmp» –