Javascript 即使previos回调没有';我还没完成工作
即使前一个回调(由相同的Javascript 即使previos回调没有';我还没完成工作,javascript,settimeout,setinterval,Javascript,Settimeout,Setinterval,即使前一个回调(由相同的setInterval触发)尚未完成其工作,传递给setInterval函数的回调是否会被触发?如果是这样,我可以做些什么来避免这种行为?我应该使用自己的布尔标志(如inProcess)还是每次调用setTimeout,而不是setInterval?基本上是的,即使之前的一些演练尚未完成,也会触发setInterval(..)的回调。我认为inProcess标志对您来说是最干净的解决方案(即使它是最容易理解的)我建议使用setTimeout 我也有类似的问题,我必须每隔3
setInterval
触发)尚未完成其工作,传递给setInterval
函数的回调是否会被触发?如果是这样,我可以做些什么来避免这种行为?我应该使用自己的布尔标志(如inProcess
)还是每次调用setTimeout
,而不是setInterval
?基本上是的,即使之前的一些演练尚未完成,也会触发setInterval(..)的回调。我认为inProcess标志对您来说是最干净的解决方案(即使它是最容易理解的)我建议使用setTimeout
我也有类似的问题,我必须每隔3秒轮询服务器上的某些数据,直到我收到数据或达到阈值。我写过这样的东西:
函数getData(){
$.post(url、数据、函数(res){
if((res.error | | res.data.length==0)和&pollCount<20){
initTimeout();
}
否则{
processData(res.data);
}
})
}
函数initTimeout(){
无功延迟=3000;
setTimeout(函数(){getData();},延迟)
}
initTimeout();
这种方法的好处是
- 首先,您不必将
变量设为全局/在父范围内,这样就可以在成功时清除interval/timeout
- 其次,
可以像initTimeout
函数initTimeout(回调,延迟){
setTimeout(函数(){
回调();
},延误);
}
是。如果需要等待它完成,则应使用setTimeout()
,并仅在工作完成时调用它。