Cla*_*u S 4 javascript angularjs
我正在做一个http.post请求,我试图显示错误消息,以防出现任何问题.我正在处理服务中的错误消息,然后将其传递给控制器并在$ scope中设置它.我没有得到任何JS错误....任何想法为什么会这样?
services.js
angular.module('app.services', [])
.factory('Model', function($http) {
Model.save = function(data) {
return $http.post(url, data)
.success(function(data, status, headers) {
console.log(data);
console.log(status);
console.log(headers);
})
.error(function(data, status, headers) {
var requestError = 'Something went wrong! :(';
return requestError; //pass error message back to $scope
});
}
return Model;
});
Run Code Online (Sandbox Code Playgroud)
controllers.js
.controller('Ctrl', function($scope, Model) {
//form object data
$scope.formInfo = {};
//form save
$scope.saveData = function() {
//console.log($scope.formInfo);
$scope.requestError = '';
//form data
var data = {name: $scope.formInfo.name, description: $scope.formInfo.description, token: "/api/v1/tokens/1/"};
Model.save(data).then(function(requestError) {
alert(requestError);
if (requestError === '') {
//do nothing for now
}
else {
$scope.requestError = requestError;
}
});
};
Run Code Online (Sandbox Code Playgroud)
})
承诺有两个最终状态:已解决(成功)或已拒绝(错误).
在控制器中,then()如果要访问两种状态,则该函数需要两个不同的处理程序.第一个处理程序仅接收来自服务的已解决(成功)承诺.要处理来自服务的拒绝(错误)承诺,您还需要这样的内容:
Model.save(data).then(function(success) { ... }, function(error) { ... });
Run Code Online (Sandbox Code Playgroud)
如果您出于某种原因只关心错误,请使用其中任何一个(相当于):
Model.save(data).then(null, function(error) { ... });
Model.save(data).catch(function(error) { ... });
Run Code Online (Sandbox Code Playgroud)
在您的服务中,确保在发生错误时实际上已将拒绝(错误)承诺返回给控制器.你这样做是通过使用return $q.reject(requestError)而不仅仅是return requestError.
重要说明:由于您正在使用$http,这将在HTTP错误的情况下拒绝承诺.如果您不处理服务中的拒绝(错误)承诺,它们将自动传递给控制器的错误处理程序.您可能希望简单地让$http拒绝通过,而不是在服务中有错误处理程序.您只需删除.error()服务即可完成此操作.这允许控制器直接处理HTTP错误.(这可能是也可能不是,这取决于你想要做什么样的错误处理).
我倾向于使用我的HTTP服务的基本模式如下所示,它只返回已下载数据的已解决的promise,或者返回$http直接发送给控制器的被拒绝的promise(错误):
return $http.get(config).then(function(success) { return success.data });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9134 次 |
| 最近记录: |