2014-08-28 4 views
1

지연된 메서드 및 일반 메서드를 호출하는 while 루프는 둘 다 값을 반환합니다. 문제는 각 반복마다 while 루프가 진행되고 지연된 메서드의 반환 값이며 일반적인 메서드는 순차적이지 않습니다. 지연된 메소드의 일부 반환 값이 늦게 전달됩니다. 지연된 메소드가 값을 리턴 할 때까지 while 루프를 대기시키는 방법.while 루프 내부의 지연된 메서드

제발 해결책을 몇 일 동안 붙어 있습니다.

업데이트 : 사이비 코드

while(!stopProcess){ 
     var pageno=findpageno(param); 
     findPageNoRecursively.done(pagenum){ 
       pageno=pagenum; 
      } 
     return pageno; 
} 

어떤 도움은 매우

+0

코드를 입력하십시오. – Regent

+0

while 루프에 일부 비동기 작업이있는 경우이를 수행 할 수 없습니다. 솔루션을 제안하기 위해 코드를 공유해야합니다. –

+2

의사 코드가 잘못되었습니다. 'findpageno()'의 결과를 모든 반복에서 정의 된 변수'pageno'에 할당합니다. 그런 다음 당신은 연기 된 핸들러를 할당하고 그 핸들러에서 같은 변수 이름을 사용합니다 (즉, 이전에 정의 된'pageno' 변수를 숨기고 있습니다.) 이것은 실수입니다. 또한 지연 또한이 루프에서 생성되거나 작은 단일 책임 함수로 코드를 나누고 문제에 대한 더 나은 설명을 제공하려고 시도하십시오. –

답변

0

때문에 (나에게 완전히 명확하지 않은 이유로) 동기식 비동기 방식을 변경하는 방법은 없습니다 감사하겠습니다 자바 스크립트 아무튼 이벤트 루프 처리에 대한 액세스를 제공하지 않습니다.

다른 이벤트 기반 프로그래밍 환경에서는 이벤트 처리 중에 작업이 완료 될 때까지 기다릴 수있는 "중첩 이벤트 루프"를 작성할 수 있습니다. Javascript에서는 불가능하며 코드는 항상 숨겨진 이벤트 루프로 종료하도록 요청됩니다.

이것은 예를 들어 node.js에서 메소드의 "동기화"변형이 제공되는 이유입니다. 동기 대기 기본이 없으므로 자바 스크립트에서는 Sync 버전을 비동기로만 제공 할 수 없습니다.

+1

JS가 할 수있는 일과 할 수없는 일에 대해 불평하지 않는 것이 도움이됩니다. 게다가, OP는 JS의 비동기 프로그래밍이 어떻게 작동하는지, 그리고 그가 무엇을 달성하려고하는지에 대해 혼란스러워합니다. 그의 질문은 자신의 부분에 대한 오해를 분명히 보여 주며, 언어에 결함이 있음을 전혀 나타내지 않습니다. – Tomalak

+0

@Tomalak : 광산은 호언 장담하지 않습니다. 간단히 말해서 "중첩 된 이벤트 루프"개념이 Javascript에 없다는 사실을 알았습니다.이 중 하나는 비동기 함수를 동기식 형식으로 변환하는 것을 불가능하게 만드는 결과를 낳았습니다 (OP가 내게 묻는 것처럼 보였습니다). 확실한 것은 단순히 의도하지 않은 것이 아니라 그 선택에 대한 이유를 알지 못합니다 (나는 그들을 조사하지 않았습니다). – 6502

+0

좋아, 호언 장담 하지마. :) 나는 당신이 대답을 읽을 때 OP가 그가 원하는 것을 할 수 없다는 인상을 갖지 않도록 약간의 비중을 제공하기를 원했습니다. 그는 잘못된 것을 원합니다, 그게 전부입니다. – Tomalak