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