哪种方法是将数据传递给回调函数的最佳方法?

时间:2014-09-23 15:10:55

标签: javascript function callback

我无法找到与此事相关的正确术语,所以我决定写一个问题。

我有这个功能:

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,我问这个问题的主要原因是因为:
angular.noop

function foo(callback) {
  var result = calculateResult();
  (callback || angular.noop)(result);
}  

它没有使用我在编写javascript函数时首先学到的return

1 个答案:

答案 0 :(得分:1)

回调函数通常不返回任何内容,它们的类型为voidsuccesserror方法都不关心回调返回的内容,也不关心。无论你传递结果都没有任何区别,无论如何都是undefined

因此,请使用较短的解决方案,而不要使用return

有时,您仍会看到使用return的回调,但仅适用于helping with control flow。假设错误情况不传递数据,您可以编写

$anotherCustomService.login(function(success, data){
    if(!success)
        return alert('Fail');
//      ^^^^^^
    alert('Success');
    console.log(data);
});