设置一个角度应用程序,它有一个工厂将数据发布到服务器
angular.module('new-ticket-app')
.factory('CreateTicketFactory', function($http, $rootScope){
var CreateTicketFactory = {
async: function($params) {
return $http({
headers: {'Content-Type': 'application/json','X-Auth-Token': $rootScope.access_token},
url: $rootScope.resourceurl+'/server',
method: "POST",
data: $params,
})
.then(function (response) {
// The return value gets picked up by the then in the controller.
return response.data;
});
// Return the promise to the controller
return promise;
}
};
return CreateTicketFactory;
});

控制器代码是
CreateTicketFactory.async($params).then(
function(d) {
console.log(d);
},
function(d) {
console.log(d);
}
);

上面的代码在firefox中显示无法访问的代码错误,并且在第一次加载应用程序时无法正常工作。
答案 0 :(得分:2)
您在一个功能中有三个return
。 return $http
行始终会在return promise
行之前返回,因此无法访问代码。如果您想要返回$ http调用本身返回的承诺,那么只需return $http({... parameters })
而不是.then
并且最后没有return promise
。
答案 1 :(得分:1)
$ http服务是一个带有单个参数的函数 - a 配置对象 - 用于生成HTTP请求和 返回承诺。
换句话说,在一个已经返回的promise是无法访问的代码之后,你试图返回一个promise。
要么在你称之为或的地方处理承诺,请在数据参数旁边提供一个将在承诺解决后立即执行的回调。