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);로 변경 한 경우 그것은 또한 작동 return callback(true, data); 라인

나는이 기능을 가지고있다. 이제는 무엇을 사용해야할지 혼란 스럽습니다.

편집

BTW, 나는이 물어 주된 이유는,이 때문에입니다 :
angular.noop

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

내가 자바 스크립트 기능을 코딩 먼저 배운 모든 return을 사용하지 않은 .

+0

이해가 안되는 부분은 무엇입니까? 'return '이 무엇을 의미하는지 묻고 있습니까? – SLaks

+0

'$ someCustomService'에 대한 코드가 있습니까? 그렇다면 호출 할 때 콜백의 반환 값에 관심이 있습니까? API 의미론의 문제이므로 스타일에 관한 문제가 아닙니다. –

답변

1

콜백 함수는 일반적으로 아무 것도 반환하지 않으며, 말하면 void입니다. successerror 메서드는 콜백이 반환하는 것을 신경 쓰지 않으며 당신도 마찬가지입니다. 결과를 통과해도 아무런 차이가 없지만 결과는 undefined입니다.

따라서 더 짧은 해결책은 return없이 사용하십시오.

때때로 return을 사용하는 콜백이 표시되지만 helping with control flow 만 표시됩니다. 오류 사례가 데이터를 전달하지 않는다고 가정하면 예를 들어 쓸 수 있습니다.

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

링크가 도움이됩니다. 나는'return'을 사용하거나 사용하지 않을 때 메모리 관리에 어떤 영향이 있는지 생각하고있었습니다. – fiberOptics

관련 문제