工厂代码
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;
}
}
});
Controller 代码
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”
。
我的问题:
当出现错误时,为什么我在 Controller 中看不到错误消息,它甚至没有在浏览器控制台中打印 "gotcha"
。我需要 Controller 中的错误详细信息,以便我可以在 View 中显示它。我不想在工厂中传递 $scope
。
我在 Controller 代码中做错了什么?
如果我没记错的话,我正在做一些符合 AngularJS Failed Resource GET 的事情 但没有得到想要的结果。
最佳答案
看起来您希望 results
函数接受回调,但它的参数列表目前是空的。不过,您正在返回 promise 。
因此要么将 Controller 中的调用更改为:
abcFactory.results()
.success(function() { ... })
.error(function() { ... })
或者改变结果函数本身:
results: function(successCallback, errorCallback) {
var promise = $http(...).success(successCallback).error(errorCallback);
return promise;
}
关于javascript - 如何处理 AngularJS 中的工厂服务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973295/