【问题标题】:async and await method in typescript (angular)打字稿中的异步和等待方法(角度)
【发布时间】:2021-09-09 08:24:30
【问题描述】:

我有两个函数,每当我在 ngOninit 中调用它们时,第二个函数总是在另一个函数之前被调用p>

getLocation() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition((position: Position) => {
        if (position) {
          console.log("Latitude: " + position.coords.latitude +
            "Longitude: " + position.coords.longitude);
          this.lat = position.coords.latitude;
          this.lng = position.coords.longitude;
          console.log(this.lat);
          console.log(this.lat);
        }
      },
        (error: PositionError) => console.log(error));
    } else {
      alert("Geolocation is not supported by this browser.");
    }
  }
}

所以我尝试先获取位置,然后调用 getWeatherByCordinates 方法

getWeatherByCoordinates(){ 
    this.weatherService.getWeatherByLatAndLong(this.latitude,this.longitude).subscribe((res) =>{
      console.log('res',res);
    });
  }

在 ngOninit 中是这样的

ngOnInit() {
    this.getLocation();
    this.getWeatherByCoordinates();
}

【问题讨论】:

  • 请分享您获得的代码,以便我们为您提供帮助
  • 刚刚做了,我认为问题出在导航器的 getCurentPosition 方法上,因为由于我无法订阅该方法,所以我只能在方法范围内使用纬度和经度,当我调用里面的服务时它工作得很好

标签: angular typescript asynchronous async-await


【解决方案1】:
getLocation() {
    return new Promise((resolve, reject) => {
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition((position: Position) => {
          if (position) {
            console.log("Latitude: " + position.coords.latitude +
              "Longitude: " + position.coords.longitude);
            this.lat = position.coords.latitude;
            this.lng = position.coords.longitude;
            console.log(this.lat);
            console.log(this.lat);
            resolve({
              lat:position.coords.latitude,
              lng:position.coords.longitude
            })
          }
        },
          (error: PositionError) => reject(error));
      } else {
        alert("Geolocation is not supported by this browser.");
      }
    });
  }



async ngOnInit() {
    await this.getLocation();
    this.getWeatherByCoordinates();
}

或者这种情况下可以使用回调

getLocation(callback) {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition((position: Position) => {
        if (position) {
          console.log("Latitude: " + position.coords.latitude +
            "Longitude: " + position.coords.longitude);
          this.lat = position.coords.latitude;
          this.lng = position.coords.longitude;
          console.log(this.lat);
          console.log(this.lat);
          callback()
        }
      },
        (error: PositionError) => console.log(error));
    } else {
      alert("Geolocation is not supported by this browser.");
    }
  }
}

ngOnInit() {
        this.getLocation(this.getWeatherByCoordinates());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2018-05-03
    • 1970-01-01
    • 2017-12-30
    • 2019-03-18
    • 2018-03-08
    • 2016-10-20
    相关资源
    最近更新 更多