我已经使用此模式使用js更新网页:
//global
let noRefresh = true;
// ws is a webSocket object
async function UpdateLoop(ws){
const delay = seconds => new Promise(resolve => setTimeout(resolve, seconds * 1000))
while(noRefresh==true){
await delay(10)
await RequestChanges(ws)
}
await RefreshConnection(ws)
UpdateLoop(ws);
}
这一直很好。但是,我认为其他一些代码会导致此循环退出(或无限期暂停)。当我运行“单击”功能时,会发生这种情况。
目前,我正在努力研究如何调试它。我尝试使用console.log来检查它是否没有被卡在等待的功能之一中,并使用firefox调试工具逐步检查代码以查看可能是什么原因造成的。
如何跟踪导致浏览器退出上述异步循环的原因?这里最好的调试方法是什么?
答案 0 :(得分:0)
事实证明,我是在蛮力地清除“鼠标”功能(用于单击保持功能中设置的计时器)中的所有计时器,这也清除了循环中的超时。
我通过添加一个全局timerID
变量来解决...
//global
let noRefresh = true;
let timerID = ''
// ws is a webSocket object
async function UpdateLoop(ws){
const delay = seconds => new Promise(resolve => timerID = setTimeout(resolve, seconds * 1000))
while(noRefresh==true){
await delay(10)
await RequestChanges(ws)
}
await RefreshConnection(ws)
UpdateLoop(ws);
}
$(document).mouseup(function (e) {
let id = window.setTimeout(function() {}, 0);
while (id--) {
if (id!=timerID){window.clearTimeout(id);}
}
}