JavaScript定时器线程
我有一个函数checkReg(),它检查我的设备在第一次启动时是否已在服务器上注册,并返回一个regStatus变量。该功能工作正常,但注册需要一点时间才能完成,如果不确认注册完成,我的应用程序将无法继续 我想用一个简单的线程检查regStatus一次1秒,如果5次尝试后它还没有注册,那么杀死线程并返回,如果在5次尝试之前完成,那么杀死线程并继续JavaScript定时器线程,javascript,timer,thread-sleep,Javascript,Timer,Thread Sleep,我有一个函数checkReg(),它检查我的设备在第一次启动时是否已在服务器上注册,并返回一个regStatus变量。该功能工作正常,但注册需要一点时间才能完成,如果不确认注册完成,我的应用程序将无法继续 我想用一个简单的线程检查regStatus一次1秒,如果5次尝试后它还没有注册,那么杀死线程并返回,如果在5次尝试之前完成,那么杀死线程并继续 Thread(run every 1 sec){ regStatus=checkReg(); if(regStatus==='done
Thread(run every 1 sec){
regStatus=checkReg();
if(regStatus==='done'){
//do something
//kill thread
}else if(regStatus==='inprogress'){
//do nothing
}elseif(regStatus==='error'){
//kill thread
}
}
我是JS新手,不知道如何启动、计时或终止线程。我已经使用了setTimeout函数,但我不确定它是否可以实现我想要的功能。JavaScript通常没有线程,但您可以轻松使用:
JavaScript通常是单线程的。您的
checkReg
正在生成XMLHttpRequest
?我相信是的,这是一个来自第三方SDK的函数,我使用它时必须与他们的server@Amanni:它不提供回调之类的功能吗?checkReg
实际上做什么?返回1、0或error@Amanni:您是否有该第三方SDK的API参考?它应该告诉您它是否接受回调函数。如果regStatus
发出同步请求,它仍将阻塞。使用setTimeout
不会阻止这种情况。它只是将其执行延迟了一秒钟。@user1689607:你是对的,我假设checkReg()
对setTimeout()
频率的影响不会太慢。如果是这样的话,OP在UI响应方面会有更大的问题。当然,他可以使用setTimeout()
并每次计算延迟(1秒减去checkReg()
运行时间)。我确实会阻塞,但时间不到5秒,除非有错误,然后只有5秒。我会一直使用它,直到找到一个不阻塞的解决方案。@Amanni您的checkReg()
函数会阻塞5秒钟,您想每秒钟运行一次吗?浏览器是否在这5秒钟内冻结?
var retry = 0
function checkStatus() {
var regStatus=checkReg();
if(regStatus==='done'){
//...
}
if(++retry > 5) {
clearTimeout(id);
}
}
var id = setInterval(checkStatus, 1000);