此处的上下文是我检查设备的位置是打开还是关闭。如果它关闭,它会提供一个警告对话框以转到位置设置。单击Proceed按钮,将对successAlert函数(代码下方)进行回调。一旦它进入successAlert函数,就会有一个watcPosition调用,以便在用户打开位置设置时查找位置变化。如果是,则由于位置已更改,因此必须调用onSuccess函数以在地图上显示新位置。
function successAlert(msg) {
alert("inside successAlert");
watchId = navigator.geolocation.watchPosition(onSuccess);
}
这是代码。在异步回调时调用successAlert函数,然后启动watchPosition计时器以查找设备位置的变化。如果位置发生变化,则应调用onSuccess回调函数。当像上面的代码一样出现警报时调用回调函数,否则不调用回调。可能是什么原因?怎么解决这个问题?
答案 0 :(得分:3)
你原来的问题是:
如何在javascript中阻止UI线程等待异步函数调用成功或错误函数?
在一般情况下,你不能;如果你尝试,不仅会阻止你的回调被调用,但最终浏览器会放弃你的代码并终止它。
你可以在一些特定的情况下(例如在进行ajax调用时),但这样做是个坏主意,因为它至少锁定了浏览器选项卡的UI,导致用户体验不佳
当存在
alert
时,如上面的代码中那样调用回调函数,否则不调用回调。可能是什么原因?怎么解决这个问题?
不,无论如何都要调用回调(除非您从页面导航离开),唯一的问题是何时。您可能想要阅读How do I return the result of an asynchronous call?(剧透:您不要接受异步)。
答案 1 :(得分:0)
试试这个。
function blockThread(milliseconds) {
const start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if (new Date().getTime() - start > milliseconds) {
break;
}
}
}
```