如何从finally块访问$ http响应

时间:2016-06-06 18:16:19

标签: angularjs angular-promise angular-http

我有一个$http请求由成功和错误函数处理,在这两种情况下我都想对响应做些什么:

$http(params)
  .then(success, error);

var success = function(response) { 
  // do stuff
  foo(response);
}
var error = function(response) { 
  // do other stuff
  foo(response);
}

我不想在两个处理程序中重复代码,我想我可能会使用finally来解决这个问题,但似乎finally函数没有收到任何参数。

我是否一直在foo(response)success函数中调用error?或者,还有更好的方法? (请说有更好的方法......)

2 个答案:

答案 0 :(得分:3)

您可以做的是将失败转化为成功:

$http(params)
  .then(success, error)
  .then(foo);

var success = function(response) { 
  // do stuff
  return response;
}
var error = function(response) { 
  // do other stuff
  return response;
}

答案 1 :(得分:2)

使用no arguments调用

finally回调。 The manual合理地解释了这一点:

  

finally(callback,notifyCallback) - 允许你观察任何一个   履行或拒绝承诺,但不做修改就这样做   最终值

此行为符合其他承诺实施(特别是Q,这是$q)的灵感。

结果处理的模式可能是

$http(...)
.catch(function (err) {
  // condition err response
  return err;
})
.then(function (result) {
  // ...
});

这与finally不同,因为此链会导致履行承诺(除非拒绝发生在then),而finally不会影响链状态(除非拒绝发生在finally)。