Ben*_*Ben 2 javascript for-loop settimeout
我正在使用代理服务器检查程序并使用以下代码使用setTimeout函数以大约5秒的间隔启动请求;
function check() {
var url = document.getElementById('url').value;
var proxys = document.getElementById('proxys').value.replace(/\n/g,',');
var proxys = proxys.split(",");
for (proxy in proxys) {
var proxytimeout = proxy*5000;
t = setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是一旦他们开始我就无法阻止他们!
function stopcheck() {
clearTimeout(t);
}
Run Code Online (Sandbox Code Playgroud)
修复或更好的方法将更受欢迎.
谢谢Stack Overflow社区!
您的代码有两个主要问题:
t
每次超时都会被覆盖,每次迭代都会丢失对先前超时的引用.t
可能不是一个全局变量,因此stopcheck()
可能无法"看到" t
.更新功能:
function check() {
var url = document.getElementById('url').value;
var proxys = document.getElementById('proxys').value.replace(/\n/g,',');
var timeouts = [];
var index;
var proxytimeout;
proxys = proxys.split(",");
for (index = 0; index < proxys.length; ++index) {
proxytimeout = index * 5000;
timeouts[timeouts.length] = setTimeout(
doRequest, proxytimeout, url, proxys[index];
);
}
return timeouts;
}
function stopcheck(timeouts) {
for (var i = 0; i < timeouts.length; i++) {
clearTimeout(timeouts[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
var timeouts = check();
// do some other stuff...
stopcheck(timeouts);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4045 次 |
最近记录: |