问题描述
我正在建立一个角度应用程序,该应用程序有一个工厂将数据发布到服务器
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中无法访问的代码错误,并且在首次加载应用程序时无法正常工作。
1楼
一个函数中有三个return 。
return $http行将始终在您的return promise行之前return promise ,因此它是无法访问的代码。
如果要返回$ http调用本身返回的保证,则只需return $http({... parameters })而不带.then也不要在最后return promise 。
2楼
$ http服务是一个带有单个参数(配置对象)的函数,该参数用于生成HTTP请求并返回promise 。
换句话说,您正在尝试在已经返回了无法到达的代码的承诺后尝试返回一个承诺。
您可以在调用它的位置处处理promise, 或者在数据参数旁边提供一个promise,该回调将在promise解析后立即执行。