【发布时间】:2017-08-14 22:20:51
【问题描述】:
我正在开发一个使用 Geolocation 的 ionic-cordova 应用程序。
根据应用流程需要获取准确的位置。
我编写了专门的方法来实现定位,并在其中使用了setTimeout。
根据我的日志,我似乎没有正确使用setTimeout - 甚至最糟糕的是我选择不当,setTimeout 不是我需要的。
这是我的代码:
getFixedLocation() {
let coordinates: Coordinates;
let maxTries = 15;
let isFixedLocation = false;
this.forceFixLocation(10);
do {
console.log("Getting location, try #" + maxTries)
this.geolocation.getCurrentPosition(GEOLOCATION_OPTIONS)
.then((position) => {
coordinates = position.coords;
});
if (coordinates.accuracy < 25 && coordinates.speed < 1) {
isFixedLocation = true;
} else {
maxTries -= 1;
}
} while(maxTries > 0 && !isFixedLocation);
if (isFixedLocation) {
return coordinates;
} else {
return null;
}
}
forceFixLocation(counter: number) {
setTimeout(() => {
if(counter > 0) {
console.log("Forcing location #" + counter)
this.geolocation.getCurrentPosition(GEOLOCATION_OPTIONS)
.then((position) => {
console.log("Got position, accuracy: " + position.coords.accuracy)
});
this.forceFixLocation(counter - 1);
}
}, 3000);
}
查看日志显示我的do-while 循环在forceFixLocation 的第一次迭代之前执行:
08-15 00:58:51.831 D/SystemWebChromeClient(19622): file:///android_asset/www/build/main.js: Line 56358 : Getting location, try #15
08-15 00:58:51.831 I/chromium(19622): [INFO:CONSOLE(56358)] "Getting location, try #15", source: file:///android_asset/www/build/main.js (56358)
08-15 00:58:51.831 D/GeolocationPlugin(19622): We are entering execute
08-15 00:58:51.841 D/SystemWebChromeClient(19622): file:///android_asset/www/build/main.js: Line 1362 : ERROR
08-15 00:58:51.841 I/chromium(19622): [INFO:CONSOLE(1362)] "ERROR", source: file:///android_asset/www/build/main.js (1362)
08-15 00:58:54.834 D/SystemWebChromeClient(19622): file:///android_asset/www/build/main.js: Line 56381 : Forcing location #10
08-15 00:58:54.844 I/chromium(19622): [INFO:CONSOLE(56381)] "Forcing location #10", source: file:///android_asset/www/build/main.js (56381)
08-15 00:58:54.844 D/GeolocationPlugin(19622): We are entering execute
08-15 00:58:56.936 D/SystemWebChromeClient(19622): file:///android_asset/www/build/main.js: Line 1362 : ERROR
08-15 00:58:56.946 I/chromium(19622): [INFO:CONSOLE(1362)] "ERROR", source: file:///android_asset/www/build/main.js (1362)
08-15 00:58:57.847 D/SystemWebChromeClient(19622): file:///android_asset/www/build/main.js: Line 56381 : Forcing location #9
08-15 00:58:57.847 I/chromium(19622): [INFO:CONSOLE(56381)] "Forcing location #9", source: file:///android_asset/www/build/main.js (56381)
这里的正确方法是什么?
【问题讨论】:
标签: javascript typescript settimeout