簡體   English   中英

在javascript中同步進行地理定位調用

[英]Make geolocation call synchronously in 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  
}

}());

非常感謝你!

地理定位必須保持異步,但是您可以通過將回調傳遞給模塊的主函數並在完成處理后在成功和錯誤函數中調用它來實現您想要的任務:

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

小提琴

我認為你不應該試圖同步。 只需為地理定位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
});

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM