2012-04-18 3 views
0

나는 setDirections라고하는 지점 A에서 B까지 경로를 그리는 비동기 요청이있는 this question까지 추적하고 있습니다. 결국 우리는 끝점을 중앙에두고 싶지만, 기본적으로지도는 대부분의 경로를 보여줍니다. setDirections 다음에 setCenter(endpoint)을 추가하기 만하면 끝점에서 센터링되지 않습니다.directionsDisplay가 종료 된 후에 만 ​​함수를 실행하는 방법은 무엇입니까?

setTimeout을 사용하여이 논리를 적용한 이유는 다른 비동기 함수 인 것처럼 보이기 때문입니다.

따라서 setDirections이 완료된 후에 만 ​​setCenter이 실행되도록하려면 어떻게해야합니까? 나는 콜백에 대해 생각했지만 내가 원하는 것을하고 있지 않다. 내 코드에서

나는 RecurialJavaScript Callback after calling function에서 패턴을 사용하여, 다음과 같은 않았다 방향이 요청 function wrapper (callback) {
  • 와 코드를 그리기 기존의 방향을 바꿈과 드로잉, 비동기

    1. 성공적인 응답 블록 내부 그래서 , 나는 wrapper을 정의한 후 callback(this.marker.getPosition())
    2. 전화, 나는 wrapper(function(latLng) { map.setCenter(latLng) })
    전화

    다음은 JSFiddle입니다. http://jsfiddle.net/EeXQF/2/

    setTimeout "solution"이 있습니다. 주석 처리를 해제하면됩니다.

  • 답변

    1

    (나는, 난 그냥 해달라고 질문에 배경의 많은이 정말 당신이 묻는 팔로우 생각 해달라고 정직합니다.)

    그러나,주의해야 할 한 가지, 자바 스크립트는 일반적으로 싱글 스레드. 한 번에 한 비트의 코드 만 실행됩니다.

    그래서 코드에서 어떤 일이 발생하도록 요청합니다. 하지만 코드가 실행되는 동안은 일반적으로 발생하지 않습니다. 코드가 완료되면 브라우저가이를 실행합니다. '시작한'작업이 대기열에 추가되고 나중에 실행됩니다.

    setTimeout은 콜백을 큐 끝에 추가합니다. 그래서 주요 기능이 완료됩니다. 지도는 물건을 처리 할 기회를 얻습니다 (대기열에 물건이 있음). 그러면 콜백이 실행됩니다.

    (실제보다 더 복잡하지만 사용자가 보는 것을 설명하는 데 도움이 될 수 있음)

    +0

    그래, 정말로 돌아가서 다시 작성해야합니다. 그 점을 지적 해 주셔서 감사합니다. 전체 전반은 부적절합니다. –

    +0

    그러나 그것보다 더 fundermental. 당신은 정말로 '질문'을 가지고 있지 않습니다. 또한 * 무슨 일이 일어나길 원하는지, 그리고 그 대신에 어떤 일이 일어나는지 말하는 것이 유용 할 것입니다. – barryhunter

    관련 문제