Mai*_*jat 10 javascript asynchronous promise w3c-geolocation
第一个方法返回承诺。
getCoordinates() {
return new Promise(function(resolve, reject) {
navigator.geolocation.getCurrentPosition(resolve, reject);
});
}
Run Code Online (Sandbox Code Playgroud)
返回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);
});
}
Run Code Online (Sandbox Code Playgroud)
使用自定义类进行 API 调用并返回结果。
reverseGeoCode(url) {
let requestService = new RequestService("json", url);
requestService.call().then(result => {
return result;
});
}
Run Code Online (Sandbox Code Playgroud)
我是这样称呼的:
let geoLocation = new GeoLocation();
geoLocation.getAddress().then(r => {
console.log(r);
});
Run Code Online (Sandbox Code Playgroud)
控制台日志未定义。
显示的片段有几个问题
getAddress()实际上return什么都没有。
如果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);
}
Run Code Online (Sandbox Code Playgroud)
您还必须以reverseGeoCode类似的方式重写,例如
async reverseGeoCode(url) {
let requestService = new RequestService("json", url);
return await requestService.call();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
下面的代码显示了类似的问题。尝试重构它。记住await在async函数中使用它。就像是:
window.onload = async () => {
const getCoords = async () => {
const pos = await new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, reject);
});
return {
long: pos.coords.longitude,
lat: pos.coords.latitude,
};
};
const coords = await getCoords();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9323 次 |
| 最近记录: |