2014-03-05 2 views
3

로 만들면 지리적 위치 정보를 기반으로 앱을 개발하므로 앱의 나머지 부분을 실행하기 전에 위치 정보를 필수로 가져와야합니다. 그렇다면 어떻게이 모듈을 동기식으로 변환 할 수 있습니까?geolocation 호출을 동 기적으로 자바 스크립트

var geolocation = (function() { 
'use strict'; 

    var geoposition; 

    var options = { 
    maximumAge: 1000, 
      timeout: 15000, 
      enableHighAccuracy: false 
}; 

function _onSuccess (position) { 
    console.log('DEVICE POSITION'); 
    console.log('LAT: ' + position.coords.latitude + ' - LON: ' + position.coords.longitude); 
    geoposition = position 
}; 

function _onError (error) { 
    console.log(error) 
}; 

function _getLocation() { 
    navigator.geolocation.getCurrentPosition(
     _onSuccess, 
     _onError, 
     options 
    ); 
} 

return { 
    location: _getLocation 
} 

}()); 

대단히 감사합니다.

답변

0

나는 그것을 동기식으로 만들지 말아야한다고 생각합니다. geolocation getter에 대한 이벤트 시스템을 구현하십시오. 이렇게하면 비동기 적으로 작동하지만 위치 정보는 위치 정보가 필요한 앱 또는 구성 요소를 초기화합니다.

var callbacks = []; 

var onGeolocationReady = function (callback) { 
    callbacks.push(callback); 
} 

function _onSuccess (position) { 
    // iterare through each callback and invoce them 
} 

// and making component 
onGeolocationReady(function() { 
    // some code here which requires geolocation 
}); 

난이 도움이되기를 바랍니다 :

다음은이 작업을 수있는 방법의 죽은 간단한 예입니다.

1

위치 정보 비동기 남아을 가지고 있지만 그들의 처리를 완료 한 후 당신은 당신의 모듈의 주요 기능에 대한 콜백에 전달하고, 성공 및 오류 기능에 각을 호출하여 당신이 원하는 것을 얻을 수 있습니다

var geolocation = (function() { 
'use strict'; 

    var geoposition; 
    var options = { 
    maximumAge: 1000, 
    timeout: 15000, 
    enableHighAccuracy: false 
    }; 

    function _onSuccess (callback, position) { 
    console.log('DEVICE POSITION'); 
    console.log('LAT: ' + position.coords.latitude + ' - LON: ' + position.coords.longitude); 
    geoposition = position 
    callback(); 
    }; 

    function _onError (callback, error) { 
    console.log(error) 
    callback(); 
    }; 

    function _getLocation (callback) { 
    navigator.geolocation.getCurrentPosition(
     _onSuccess.bind(this, callback), 
     _onError.bind(this, callback), 
     options 
    ); 
    } 

    return { 
    location: _getLocation 
    } 

}()); 

geolocation.location(function() { 
    console.log('finished, loading app.'); 
}); 

Fiddle

+0

"비동기 상태로 유지해야합니까?" 왜 그런가요? 나는 그것을 이해한다고 느낀다. 그러나 나는 그것을 설명 할 수 없을 것이다. – FedericoCapaldo

관련 문제