2014-03-05 17 views
3

我正在開發基於地理位置的應用程序,所以它必須首先獲取位置,即使在應用程序其餘部分執行之前。那麼,我怎樣才能以同步的方式轉換這個模塊呢?在javascript中同步進行地理位置調用

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

我認爲你不應該試圖讓它同步。只需實現某種地理定位獲取器的事件系統。這種方式它異步工作,但地理位置初始化您的應用程序或組件需要地理位置。

這裏有一個如何這可能是工作一個死簡單的例子:

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.'); 
}); 

​​

+0

你會如何解釋「必須保持異步」?這是爲什麼?我覺得我明白了,但我無法解釋它。 – FedericoCapaldo