我很喜欢Nativescript(带有anngular2 / typescript)。我的用例是使用nativescript geolocation插件跟踪用户位置,并保存结果(如纬度和经度)以供以后使用。以下是我的示例代码:
export class AppComponent {
public latitude: number;
public longitude: number;
public constructor()
{
this.updateLocation();
this.getWeather(this.latitude ,this.longitude);
}
private getDeviceLocation(): Promise<any> {
return new Promise((resolve, reject) => {
geolocation.enableLocationRequest().then(() => {
geolocation.getCurrentLocation({desiredAccuracy:3,updateDistance:10,timeout: 20000}).then(location => {
resolve(location);
}).catch(error => {
reject(error);
});
});
});
}
public updateLocation() {
this.getDeviceLocation().then(result => {
// i am saving data here for later usage
this.latitude = result.latitude;
this.longitude = result.longitude;
}, error => {
console.error(error);
});
}
public getWeather(latitude:number,longitude:number){
// do stuff with lat and long
}
}
但我无法将纬度和经度的值传递给getWeather方法。它是未定义的。我做错了什么?我知道解决方法:通过在updateLocation内部调用getWeather,其中这些值可用并让这个东西工作但不知何故我觉得这不是一个合适的方法。谢谢提前。
答案 0 :(得分:2)
你认为“不合适的方式”实际上是恰当的方式;您的this.updateLocation()
函数是异步(Promise),因此下面的行(this.getWeather(this.latitude ,this.longitude)
)会在this.latitude
和this.longitude
初始化之前运行。
初始化时,您会想要调用getWeather
,而这正是Promise在updateLocation
中返回的时间。