javascript - 如何使用 Angular 的 $q promise 检索 HTTP 状态代码?

标签 javascript c# angularjs

我的代码中有一个 $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) {});

但是,如果我使用这个代码块,statusheadersconfig 都是未定义的。我的问题是如何保留此语法但仍然检索错误代码?

作为附加引用,后端是一个 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/

相关文章:

javascript - function () {} 分配给变量时是什么意思

c# - HTTP 摘要认证 - 在多个 http 请求之间共享 MD5 实例

javascript - Node 获取数据后如何在 AngularJS 中使用 $get 请求?

javascript - twilio错误 "accountSid must start with AC"

javascript - 悬停播放视频缩略图几秒钟,然后显示缩略图。 - Javascript

javascript - 文件读取器 API : viewing the contents outside of a callback

c# - WPF 拉伸(stretch)全屏应用程序以覆盖整个屏幕

c# - 使用webservice每天只动态执行一次方法

javascript - 如何在 ionic 页面顶部滚动

javascript - 从基本提供者继承时如何防止直接访问属性?