Мы пытаемся обновить завод, который возвращает обещание. Оригинальная фабрика использует $ http-> success-> error, а контроллер имеет .then (...).Угловое обещание разрешено до заводского исполнения
Мы хотим «перенести» с успеваемости/ошибки, чтобы затем/уловить, но мы получаем следующее сообщение об ошибке в контроллере: TypeError: Cannot read property 'then' of undefined
.
Методы Factory являются следующие():
'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», я получаю афферентную ошибку.
Любая помощь будет принята с благодарностью. С уважением
Разница заключается в операторе return * before * '$ http.get'. Для того, чтобы контроллер мог называть «. Then» на что-то, это «что-то» должно быть возвращено. – user1935361
Вы ПОЛНОСТЬЮ правы !!!! Большое вам спасибо за вашу помощь!!! – aplon