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

时间:2015-09-03 15:11:24

标签: 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或字符串,具体取决于回调success()error()。我写了那段代码,但似乎没有用。

1 个答案:

答案 0 :(得分:3)

接受的答案是对的,但也是错的(它给你正确的代码,但没有解释为什么这不起作用的推理)。 $http.put 会返回一个承诺,为您提供successerror个回调。答案中的信息不正确。

您无法返回successerror的值,因为它们是回调,而不是A + promise标准的一部分。它们不会链接,因为每次调用它们时它们都不返回新的承诺,而是返回相同的承诺。

出于这个原因,您应该或多或少总是使用then / catch - 这些都可以很好地与其他非$http承诺一起使用,并且是标准方法。它们还支持链接,因为thencatch将在每次后续调用时返回新版本的promise - 因此第一个then的返回值将传递给第二个{{1} (等等)。

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

then