Javascript AngularJS:为$http success()或error()返回不同的值

Javascript AngularJS:为$http success()或error()返回不同的值,javascript,angularjs,asynchronous,angular-promise,angular-http,Javascript,Angularjs,Asynchronous,Angular Promise,Angular Http,在控制器中,我具有以下功能: bar.updateData = function(val) { $http.put('url/foo/', { param : val }).success(function(data){ return true; }).error(function(data){ return 'this is a string'; }); }; 我需要返回true或一个字符串,具体取决于回调s

在控制器中,我具有以下功能:

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

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

公认的答案是对的,但也错了(它给出了正确的代码,但没有解释为什么这不起作用的原因)
$http.put
确实返回一个承诺,该承诺会给您
成功
错误
回调。那答案中的信息完全不正确

您不能从
success
error
返回值,因为它们是回调,不属于A+承诺标准。它们不会连锁,因为它们不会在每次您调用它们时返回新的承诺,而是返回相同的承诺

因此,您应该或多或少地始终使用
然后
/
捕获
——这两种方法都与其他非
$http
承诺很好地结合在一起,并且都是标准方法。它们还支持链接,因为
then
catch
将在每次后续调用中返回承诺的新版本,因此第一个
then
的返回值将传递给第二个
then
(依此类推)

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

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';
    });
};

接受的答案是对的,但也有错(它给出了正确的代码,但没有解释为什么这样做不起作用)
$http.put
确实返回一个承诺,该承诺会给您
成功
错误
回调。那答案中的信息完全不正确

您不能从
success
error
返回值,因为它们是回调,不属于A+承诺标准。它们不会连锁,因为它们不会在每次您调用它们时返回新的承诺,而是返回相同的承诺

因此,您应该或多或少地始终使用
然后
/
捕获
——这两种方法都与其他非
$http
承诺很好地结合在一起,并且都是标准方法。它们还支持链接,因为
then
catch
将在每次后续调用中返回承诺的新版本,因此第一个
then
的返回值将传递给第二个
then
(依此类推)

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

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';
    });
};

接受的答案是对的,但也有错(它给出了正确的代码,但没有解释为什么这样做不起作用)
$http.put
确实返回一个承诺,该承诺会给您
成功
错误
回调。那答案中的信息完全不正确

您不能从
success
error
返回值,因为它们是回调,不属于A+承诺标准。它们不会连锁,因为它们不会在每次您调用它们时返回新的承诺,而是返回相同的承诺

因此,您应该或多或少地始终使用
然后
/
捕获
——这两种方法都与其他非
$http
承诺很好地结合在一起,并且都是标准方法。它们还支持链接,因为
then
catch
将在每次后续调用中返回承诺的新版本,因此第一个
then
的返回值将传递给第二个
then
(依此类推)

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

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';
    });
};

接受的答案是对的,但也有错(它给出了正确的代码,但没有解释为什么这样做不起作用)
$http.put
确实返回一个承诺,该承诺会给您
成功
错误
回调。那答案中的信息完全不正确

您不能从
success
error
返回值,因为它们是回调,不属于A+承诺标准。它们不会连锁,因为它们不会在每次您调用它们时返回新的承诺,而是返回相同的承诺

因此,您应该或多或少地始终使用
然后
/
捕获
——这两种方法都与其他非
$http
承诺很好地结合在一起,并且都是标准方法。它们还支持链接,因为
then
catch
将在每次后续调用中返回承诺的新版本,因此第一个
then
的返回值将传递给第二个
then
(依此类推)

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

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';
    });
};