如何从 finally 块访问 $http 响应

How to access $http response from the finally block

我有一个 $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 函数没有接收任何参数。

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

你能做的就是化失败为成功:

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

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

finally 回调被调用 no arguments. The manual 合理地解释了这一点:

finally(callback, notifyCallback) – allows you to observe either the fulfillment or rejection of a promise, but to do so without modifying the final value.

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

结果处理的模式可能是

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

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