약속을 반환하는 공장을 업데이트하려고합니다. 원래 Factory는 $ http-> success-> error를 사용하고 컨트롤러에는 .then (...)이 있습니다.공장 실행 전에 각도 약속이 해결되었습니다.
성공/오류에서 다음/catch로 "이전"하려고하지만 컨트롤러에 다음 오류 메시지가 표시됩니다 : TypeError: Cannot read property 'then' of undefined
.
공장 메소드는() 다음과 같다
아래와'use strict';
xmsbsExtranet.factory('projectsTimeTrackingServices', ['$resource', '$http', '$log', '$q', 'membershipServices',
function ($resource, $http, $log, $q, membershipServices) {
var serviceBase = 'http://localhost:51617/api/';
var _model = {};
var service = {
model: _model,
getByProjectId: _getByProjectId_new,
upsert: _upsert,
};
return service;
function _getByProjectId_old(projectId) {
var deferred = $q.defer();
$http({
method: "Get",
url: "../api/projectsTimeTracking/project/" + projectId
}).success(function (response) {
deferred.resolve(response);
}).error(function (err, status) {
//membershipServices.logOut();
deferred.reject(err);
});
return deferred.promise;
};
function _getByProjectId_new(projectId) {
$http.get("../api/projectsTimeTracking/project/" + projectId)
.then(function (response) {
return response.data;
}).catch(function (err, status) {
//membershipServices.logOut();
return err;
});
};
}]);
컨트롤러의 "짧은"버전이므로 :
projectsTimeTrackingServices
.getByProjectId(vm.project.xrmId)
.then(function (data) {
//do something with the data
});
가 서비스 방법 "_getByProjectId_old"을 실행하면, 모든 예상대로 작동합니다. 하지만 "_getByProjectId_new"로 변경하면 afformentioned 오류가 발생합니다.
도움을 주시면 대단히 감사하겠습니다. 감사합니다.
차이점은 * '$ http.get'이전의 return 문입니다. 컨트롤러가 무언가에 '.then'을 호출 할 수 있으려면 '무언가'가 반환되어야합니다. – user1935361
당신은 완전히 맞습니다 !!!! 도와 주셔서 정말 감사합니다!!! – aplon