2014-09-23 2 views
0

Я не могу найти правильный термин, связанный с этой штукой, поэтому я решил написать вопрос.Каков наилучший способ передачи данных в функцию обратного вызова?

У меня есть эта функция:

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 он также работает. Теперь я смущен, что использовать.

EDIT

Кстати, главная причина, почему я задаю этот вопрос, из-за этого:
angular.noop

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

Он не использовал return, которые я изучил первый в кодовом JavaScript функции ,

+0

Что вы не понимаете? Вы спрашиваете, что означает «возвращение»? – SLaks

+0

У вас есть код для '$ someCustomService'? Если да, имеет ли он какой-либо интерес к возвращаемому значению обратных вызовов при его вызове? Дело не в стиле, а в семантике API. – 2014-09-23 15:20:53

ответ

1

Функции обратного вызова обычно не возвращают ничего, они имеют тип void, так сказать. Ни методы success, и error не заботятся о том, как возвращаются обратные вызовы, так и нет. Получаете ли вы результат, не имеет никакого значения, в любом случае это undefined.

Следовательно, используйте более короткое решение без return.

Иногда вы по-прежнему будете видеть обратные вызовы, которые используют return, но только для helping with control flow. Предполагая, что случай ошибки не передает данные, вы можете, например, написать

+0

Ссылка настолько полезна. Я думал, есть ли какое-либо влияние на управление памятью при использовании или отсутствии использования 'return'. – fiberOptics

Смежные вопросы