在控制器中我有这个功能:
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()
。我写了那段代码,但似乎没有用。
答案 0 :(得分:3)
接受的答案是对的,但也是错的(它给你正确的代码,但没有解释为什么这不起作用的推理)。 $http.put
会返回一个承诺,为您提供success
和error
个回调。答案中的信息不正确。
您无法返回success
和error
的值,因为它们是回调,而不是A + promise标准的一部分。它们不会链接,因为每次调用它们时它们都不返回新的承诺,而是返回相同的承诺。
出于这个原因,您应该或多或少总是使用then
/ catch
- 这些都可以很好地与其他非$http
承诺一起使用,并且是标准方法。它们还支持链接,因为then
和catch
将在每次后续调用时返回新版本的promise - 因此第一个then
的返回值将传递给第二个{{1} (等等)。
@Pankaj发布的代码或多或少是正确的,我会做一个小修改并使用then
而不是将两个回调传递给catch
,因为它更容易扫描。
then