2012-02-18 2 views
1

몇 가지 사항을 확인하고 setTimeout과 queue.pop()을 사용하여 반복적으로 자체를 실행하는 비동기 함수가 있습니다. 일부 논리가 참인 후 일부 요소가 대기열에 남아 있어도 계속 호출하고 계속 호출하는 기능이 필요하지 않습니다. 그래서 나는 다음과 같은 성명서를 가지고 있습니다.자바 비동기 기능 : 반환과 함께 짧게 잘라 내기

if (isWhatIneed(currentItem)) { 
    completed = true; 
    return; 
} 

나는 찾고있는 것을 가지고 있습니다. 문제는 큐가 그 이후로 더 많은 항목을 공급 받았고 비동기 적으로 계속 실행된다는 것입니다. 이것은 더 아무것도 (특히 큐에서 더 많은 항목을 팝업을 계속 실행하지 않는 일에서 호출 스택의 각 실행을 방지

if (completed) { 
    console.log("already completed"); 
    return; 
} 

: 그래서 내가 그 함수의 맨 위에 추가 한에 해결하는).

제 질문은 여러 번의 return 문을 사용하여 읽었습니다. 기능의 맨 위에있는 것은 실천이 좋지 않습니다. 그러나이 경우에는 이것이 할 수있는 또 다른 방법이 있습니까? 나는 if (! completed) {// ...}로 내 기능의 몸 전체를 감쌀 수 있었지만, 이것은 몸 전체를 들여 쓰기 때문에 나를 추악하게 만든다. 조기 회귀는 그렇지 않다.

감사합니다,

+4

어디에서 함수의 맨 위에 return 문을 사용하는 것이 바람직하지 않습니까? 전신을 감쌀 때보 다 훨씬 낫습니다. –

+0

MDN에서 읽은 것 같아요. 아마도 한 가지만 반환해야한다고 말입니다. 더 이상 확신 할 수 없습니다. 코멘트 주셔서 감사합니다! :-) –

+0

제 2의 James 'opionion입니다. 또한 코드 경로를 더 쉽게 따라 할 수 있기 때문에 여러 번 반환하는 것이 좋지 않지만이 경우에는 바람직하고 명확하다고 생각합니다. –

답변

1

특히 경우 이러한 유형의 여러 반환 문을 사용에는 문제가 없습니다.

예를 들어 return은 그 기능이 성공했는지 또는 다른 오류 메시지인지 확인할 수있는 값일 수 있습니다.

return 문이 함수 내에 여러 개 있고 코드 경로를 따라 잡는 것에 관한 문제가 있다면 점프를 사용하지 않으므로이 방법에 문제가 없습니다. 이 함수는 다른 행에서 호출하지 않은 곳에서 리턴합니다. (다중 반환을 사용하지 않고 재귀 적 역 추적 알고리즘을 구현하십시오. 실행 불가능합니다).

따라서 걱정하지 않아도 여러 개의 return 문을 사용하는 것이 좋습니다.