AngularJS:Return $http success() 或 error() 的不同值

AngularJS: Return different values for $http success() or error()

在控制器中我有这个功能:

bar.updateData = function(val) {
    $http.put('url/foo/', {
        param   : val
    }).success(function(data){
        return true;
    }).error(function(data){
        return 'this is a string';
    });
};

我需要 return true 或字符串,具体取决于回调 success()error()。我写了那个代码,但似乎不起作用。

接受的答案是正确的,但也是错误的(它为您提供了正确的代码,但没有解释为什么这行不通的原因)。 $http.put return 承诺给你 successerror 回调。该答案中的信息完全不正确。

您不能 return 来自 successerror 的值,因为它们是 回调 而不是 A+ 承诺标准的一部分。它们不会链接,因为它们不会在您每次调用它们时 return 一个新的承诺,而是 return 相同的承诺。

出于这个原因,您应该或多或少始终使用 then/catch - 这两种方法都可以很好地与其他非 $http 承诺配合使用,并且是标准方法。它们还支持链接,因为 thencatch 将 return 一个新版本的承诺与每个后续调用 - 因此来自第一个 then 的 return 值将传递给第二个 then(依此类推)。

@Pankaj 发布的代码或多或少是正确的,我会做一个小修改并使用 catch 而不是将两个回调传递给 then 因为它更容易扫描。

bar.updateData = function(val) {
  return $http.put('url/foo', { param: val })
    .then(function(res) {
      return res.data;
    })
    .catch(function(error) {
      return 'this is a string';
    });
};