工厂代码
app.factory('abcFactory', function ($http, Config, $log) {
var serviceURL = Config.baseURL + '/results';
return{
results:function() {
var promise = $http({
method: 'GET',
url: serviceURL,
timeout: Config.httpTimeout
}).then(function(response) {
return response;
}, function(reason) {
$log.error("Request Failed: ", reason)
});
return promise;
}
}
});
控制器代码
app.controller('abcController',function ($scope, $log,abcFactory, Config)
{
abcFactory.results(function(data){
$scope.results =data;
},function(response)
{
console.log("response"+response);
if(response.status === 0)
{
console.log("gotcha");
$scope.serviceTimedoutError(response.data, response.status, response.config);
} else
{
console.log("gotcha");
$scope.serviceFailure(response.data, response.status, response.config);
}
});
});
$scope.results
在服务返回良好响应时填充正常。
并且,当出现错误时,我可以在控制台上看到来自工厂代码日志的错误消息"Request Failed: blah blah "
。
我的问题:
当出现错误时,为什么我没有在控制器中看到错误消息,它甚至不在浏览器控制台中打印"gotcha"
。我需要控制器中的错误详细信息,以便我可以在视图中显示它。我不想在工厂中传递$scope
。
我在Controller代码中做错了什么?
如果我没有错,我正按照AngularJS Failed Resource GET的方式做一些事情。 但没有得到理想的结果。
答案 0 :(得分:4)
看起来您希望results
函数进行回调,但其参数列表当前为空。你回来了promis。
因此要么将控制器中的呼叫更改为:
abcFactory.results()
.success(function() { ... })
.error(function() { ... })
或者更改结果函数本身:
results: function(successCallback, errorCallback) {
var promise = $http(...).success(successCallback).error(errorCallback);
return promise;
}
答案 1 :(得分:1)
弃用通知 $ http遗留承诺方法成功和错误已被弃用。请改用标准方法。如果$ httpProvider.useLegacyPromiseExtensions设置为false,则这些方法将抛出$ http / legacy错误。