我的代码中有一个 $http.post
到后端,当然事情可能会出错。如果我在 Angular 内使用以下语法:
$http.post(url).success(function(data, status, headers, config))
.error(function(data, status, headers, config));
如果出现错误,我可以使用 status
检索错误代码,并在 error()
中定义的函数中处理它。但是,如果我改为采用这种方法(这是我实际上正在使用的方法):
var deferred = $q.defer();
$http.post(url).success(deferred.resolve).error(deferred.reject);
return deferred.promise;
使用第二种语法,我将所有 ajax 调用都放在一个单独的 ServiceJS
目录中,并且可以根据具体情况处理成功或错误。例如,如果第二个片段是 Service.MyFunction()
那么在我需要它的代码中我会:
Service.MyFunction().then(function() {},
function(data, status, headers, config) {});
但是,如果我使用这个代码块,status
、headers
、config
都是未定义的。我的问题是如何保留此语法但仍然检索错误代码?
作为附加引用,后端是一个 C# Web API 项目,它会使用 return BadRequest();
或类似方法返回错误。
最佳答案
尝试这样的事情:
myFunction(){
var deferred = $q.defer();
// you can use .then() instead of .success or .error
$http.post(url).then(function(successResponse){
var data = successResponse.data;
var status = successResponse.status;
...
deferred.resolve(successResponse);
}, function(failureResponse){
var status = failureResponse.status;
var config = failureResponse.config;
...
deferred.reject(failureResponse);
});
return deferred.promise;
}
关于javascript - 如何使用 Angular 的 $q promise 检索 HTTP 状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894779/