我无法找到与此事相关的正确术语,所以我决定写一个问题。
我有这个功能:
var methods = {
login: function(callback){
$someCustomService
.login() // This returns $http
.success(function(data){
// callback(true, data); --- doing this without using 'return' also works
return callback(true, data);
})
.error(function(data){
return callback(false, data);
})
}
};
调用该函数:
$anotherCustomService.login(function(success, data){
if(success){
alert('Success');
}else{
alert('Fail');
}
console.log(data);
});
行return callback(true, data);
工作正常,但如果我在不使用callback(true, data);
的情况下将其更改为return
,它也可以正常工作。现在我很困惑是否要使用什么。
修改
BTW,我问这个问题的主要原因是因为:function foo(callback) {
var result = calculateResult();
(callback || angular.noop)(result);
}
它没有使用我在编写javascript函数时首先学到的return
。
答案 0 :(得分:1)
回调函数通常不返回任何内容,它们的类型为void
。 success
和error
方法都不关心回调返回的内容,也不关心。无论你传递结果都没有任何区别,无论如何都是undefined
。
因此,请使用较短的解决方案,而不要使用return
。
有时,您仍会看到使用return
的回调,但仅适用于helping with control flow。假设错误情况不传递数据,您可以编写
$anotherCustomService.login(function(success, data){
if(!success)
return alert('Fail');
// ^^^^^^
alert('Success');
console.log(data);
});