代码之家  ›  专栏  ›  技术社区  ›  Maihan Nijat

如何将AsyncWait与HTML5地理位置API一起使用?

  •  1
  • Maihan Nijat  · 技术社区  · 6 年前

    第一种方法返回Promise。

    getCoordinates() {
      return new Promise(function(resolve, reject) {
        navigator.geolocation.getCurrentPosition(resolve, reject);
      });
    }
    

    返回的结果 reverseGeoCode 方法。

    async getAddress() {
      await this.getCoordinates().then(position => {
        let latitude = position.coords.latitude;
        let longitude = position.coords.longitude;
        let url = Constants.OSMAP_URL + latitude + "&lon=" + longitude;
        // Reverse geocoding using OpenStreetMap
        return this.reverseGeoCode(url);
      });
    }
    

    使用自定义类进行API调用并返回结果。

    reverseGeoCode(url) {
      let requestService = new RequestService("json", url);
      requestService.call().then(result => {
        return result;
      });
    }
    

    我这样称呼:

    let geoLocation = new GeoLocation();
    geoLocation.getAddress().then(r => {
      console.log(r);
    });
    

    控制台日志未定义。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Lyubomir    6 年前

    1. getAddress() return

    2. await then()

    async getAddress() {
      // notice, no then(), cause await would block and 
      // wait for the resolved result
      const position = await this.getCoordinates(); 
      let latitude = position.coords.latitude;
      let longitude = position.coords.longitude;
      let url = Constants.OSMAP_URL + latitude + "&lon=" + longitude;
    
      // Actually return a value
      return this.reverseGeoCode(url);  
    }
    

    reverseGeoCode

    async reverseGeoCode(url) {
      let requestService = new RequestService("json", url);
      return await requestService.call();
    }