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 承诺给你 success
和 error
回调。该答案中的信息完全不正确。
您不能 return 来自 success
和 error
的值,因为它们是 回调 而不是 A+ 承诺标准的一部分。它们不会链接,因为它们不会在您每次调用它们时 return 一个新的承诺,而是 return 相同的承诺。
出于这个原因,您应该或多或少始终使用 then
/catch
- 这两种方法都可以很好地与其他非 $http
承诺配合使用,并且是标准方法。它们还支持链接,因为 then
和 catch
将 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';
});
};
在控制器中我有这个功能:
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 承诺给你 success
和 error
回调。该答案中的信息完全不正确。
您不能 return 来自 success
和 error
的值,因为它们是 回调 而不是 A+ 承诺标准的一部分。它们不会链接,因为它们不会在您每次调用它们时 return 一个新的承诺,而是 return 相同的承诺。
出于这个原因,您应该或多或少始终使用 then
/catch
- 这两种方法都可以很好地与其他非 $http
承诺配合使用,并且是标准方法。它们还支持链接,因为 then
和 catch
将 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';
});
};