【发布时间】:2016-11-23 18:04:22
【问题描述】:
我们正在尝试更新一个返回承诺的工厂。原厂使用$http->success->error,控制器有.then(...)。
我们想从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”,则会出现上述错误。
任何帮助将不胜感激。 最好的问候
【问题讨论】: