Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript定时器线程_Javascript_Timer_Thread Sleep - Fatal编程技术网

JavaScript定时器线程

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

我有一个函数checkReg(),它检查我的设备在第一次启动时是否已在服务器上注册,并返回一个regStatus变量。该功能工作正常,但注册需要一点时间才能完成,如果不确认注册完成,我的应用程序将无法继续

我想用一个简单的线程检查regStatus一次1秒,如果5次尝试后它还没有注册,那么杀死线程并返回,如果在5次尝试之前完成,那么杀死线程并继续

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);