如何浏览 url 数组并解析它?



我有一个URL数组,我想去每个页面解析一些信息。我愿意:

var numbers = ["1111", "2222", "3333"];
function parse(page){...
}
function set(page){
console.log(page);
window.location = page;
parse (page);
}
for (j=0,m = numbers.length; j<m; j++){
page="http://www.*****/*****/"+numbers[j]+"/*****/"; 
setInterval(set(page), 10000);
}

但它不起作用,因为浏览器尝试下载页面,最后只显示最后一个页面。函数"parse"不解析页面。如何修复我的代码?

setInterval将按照您调用它的方式每 10 秒调用一次set函数。for循环将在before那个时候结束,page在那个时候的值将是:

"http://www.*****/*****/3333/*****/"; 

因此,10 秒后,您只会看到显示的页面。

尝试将 setTimeout 与递归调用结合使用。

const MAX=100;
setPage(num){
parse()
if(num<MAX)
setTimeout(setPage(num+1), 10000);
}

当你使用setInterval()时,你只是告诉浏览器在 10 秒后执行set()函数,并且因为所有的setInterval()都是在很短的时间内被调用的 for 循环,它们也会一起执行任务,然后 set 将执行三次,首先是"1111"然后是"2222""3333"
似乎它只运行最后一个与"3333".

我建议您只使用一次setInterval(),而page变量将使用计数器创建。

var counter=0
function count(){
page="http://www.*****/*****/"+numbers[counter]+"/*****/";
set(page);
counter+=1;
if(counter>=numbers.length){
counter=0;
}
}
setInterval(count(), 10000);

这是由于JS中的范围和闭包。该问题的解决方案是在循环中创建 IIFE(立即调用的函数表达式)!

for (var i=1; i<=5; i++) {
page="http://www.*****/*****/"+numbers[j]+"/*****/"; 
(function(j){
setTimeout( set(page), 10000 );
})( i );
}

如果您有时间,请参考 JS中的闭包!