AngularJS中的错误处理http get然后构造

Fed*_*les 65 javascript promise angularjs angular-http angular-promise

当使用AngularJS"http get then"构造(promises)时,如何处理HTTP错误,例如500?

$http.get(url).then(
    function(response) {
        console.log('get',response)
    }
)
Run Code Online (Sandbox Code Playgroud)

问题是,对于任何非200 HTTP响应,都不会调用内部函数.

lau*_*ent 142

您需要添加其他参数:

$http.get(url).then(
    function(response) {
        console.log('get',response)
    },
    function(data) {
        // Handle error here
    })
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,上面的"响应"对象包括:data,status,headers,config,statusText.上面的'data'对象有:data,status,config,statusText.(有关是否传递statusText的特殊规则 - 浏览器,移动或不移动,Web服务器等) (9认同)

Rav*_*ish 54

您可以使用以下方法使这一点更清洁:

$http.get(url)
    .then(function (response) {
        console.log('get',response)
    })
    .catch(function (data) {
        // Handle error here
    });
Run Code Online (Sandbox Code Playgroud)

与@ this.lau_回答类似,方法不同.

  • 它必须被接受答案,因为`.error()`方法不能解决500个错误!请接受. (3认同)
  • **注意**如果.then有内部错误(例如调用不存在的方法),. catch也将执行,而.then(success,error)仅在请求本身失败时才处理错误。 (3认同)
  • 在v1.6.0中删除了`success`和`remove`之后的最佳解决方案 (2认同)

Umu*_*acı 13

http://docs.angularjs.org/api/ng.$http

$http.get(url).success(successCallback).error(errorCallback);
Run Code Online (Sandbox Code Playgroud)

用您的函数替换successCallback和errorCallback.

编辑:考虑到他正在使用,Laurent的答案更为正确then.然而,我将离开这里作为将访问这个问题的人的替代方案.

  • 值得一提的是,这与Laurent的答案没有相同之处.`.then()`返回一个promise.`.success()`和`.error()`没有. (10认同)
  • 同样重要的是要记住$ http api的`success`和`error`回调将被弃用. (8认同)
  • @james-brewer:为了更准确,`.then()`返回一个**新的**承诺.`.success()`和`.error()`不这样做,它们都返回`get(url)`提供的原始承诺. (5认同)
  • 在v1.6.0中也删除了`success`和`error`,不能再使用了. (3认同)
  • 另请注意,文档说“已弃用”,但 success() 和 error() 实际上已完全“删除”;不要被愚弄。 (2认同)