我有一个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”不解析页面。如何修复我的代码?
答案 0 :(得分:0)
setInterval
将按照您调用它的方式每10秒调用一次set
函数。 for
循环将在该时间结束before
,此时page
的值将为:
"http://www.*****/*****/3333/*****/";
因此,10秒后您将只看到显示的页面。
答案 1 :(得分:0)
尝试使用setTimeout与递归调用结合使用。
const MAX=100;
setPage(num){
parse()
if(num<MAX)
setTimeout(setPage(num+1), 10000);
}
答案 2 :(得分:0)
这是由JS中的Scopes和Closures引起的。该问题的解决方案是在循环内创建IIFE(立即调用函数表达式)!
for (var i=1; i<=5; i++) {
page="http://www.*****/*****/"+numbers[j]+"/*****/";
(function(j){
setTimeout( set(page), 10000 );
})( i );
}
&#13;
如果您有时间,请参阅JS中的闭包!
答案 3 :(得分:0)
当您使用Planet
时,您只需告诉浏览器在10秒后执行{
"Microsoft.Resources":{
"resourceUri":"/subscriptions/123subscription123/resourceGroups/123resourcegroup123/providers/Microsoft.Storage/storageAccounts/123storagaccount123",
"location":"euwest"
}
}
功能,并且因为所有SELECT JSON_VALUE(I.value, '$.resourceUri') as resourceUri
, JSON_VALUE(C.value, '$.Location') as Location
FROM OPENJSON(InstanceData, N'lax $.Microsoft.Resources') I
CROSS
APPLY OPENJSON(I.value, N'lax $.fields.resourceUri') C
都在很短的时间内被调用对于循环,他们也将同时执行任务,然后设置将执行三次,首先是setInterval()
然后是set()
和setInterval()
。
它似乎只用"1111"
运行最后一个。
我建议您只使用"2222"
一次,而使用计数器创建"3333"
变量。
"3333"