首页 > 解决方案 > 警报在 getPosition 函数结束之前打开

问题描述

getPosition() 是一个可以让我们找到位置的函数,问题是警报在函数结束之前出现,第一次警报为空,然后我可以获取值

 <input type="button" value="test" onClick="test()">
 <script>
 var coordinates = {latitude: null, longitude: null, error: false}
    
      function test(){
           getPosition();
           alert(coordinates.latitude);
      }

      function getPosition() {
           navigator.geolocation.getCurrentPosition(success, fail);
           function success (pos) {
                coordinates.latitude = pos.coords.latitude;
                coordinates.longitude = pos.coords.longitude;
           }
           function fail(error){
                coordinates.error = true;
           }
      }
 </script>

标签: javascriptposition

解决方案


您必须让警报等待来自 的响应navigator.geolocation.getCurrentPosition

为此,您可以使用 async/await,如下所示:

<input type="button" value="test" onClick="test()">
<script>
 var coordinates = {latitude: null, longitude: null, error: false}
    
      async function test(){
           try {
            const result = await getPosition();
            alert(coordinates.latitude);
           } catch(error) {
                alert("Error getting coordinates");
           }
           
      }

      async function getPosition() {
      return new Promise((resolve, reject) => {
                 navigator.geolocation.getCurrentPosition(success, fail);
           function success (pos) {
                coordinates.latitude = pos.coords.latitude;
                coordinates.longitude = pos.coords.longitude;
                resolve();
           }
           function fail(error){
                coordinates.error = true;
                reject(error);
           }
      });

      }
 </script>

或继续使用回调,如下所示:

 <input type="button" value="test" onClick="test()">
 <script>
 var coordinates = {latitude: null, longitude: null, error: false}
    
      function test(){
           getPosition();
      }

      function getPosition() {
           navigator.geolocation.getCurrentPosition(success, fail);
           function success (pos) {
                coordinates.latitude = pos.coords.latitude;
                coordinates.longitude = pos.coords.longitude;
                alert(coordinates.latitude);
           }
           function fail(error){
                coordinates.error = true;
                alert("Error getting coordinates");
           }
      }
 </script>


推荐阅读