我正试图从某个网站下载文件'website.com'。我在array
中拥有所有唯一的ID。
这是我写的代码:
for(var i=0;i<ids.length;i++) {
var timeInterval = 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
timeInterval = (i+1)*1000;
})(i,timeInterval);
}
问题在于它下载了与数组id的最后一个元素相对应的文件,而不是全部
如何使循环适用于ids中的每个元素?
PS:我尝试过在不同相关问题中给出的各种解决方案,但没有一个能带来预期的结果,所以我不得不将其作为一个不同的问题发布。
答案 0 :(得分:3)
您正在更新&#34; timeInterval&#34;匿名函数末尾的参数,虽然该语句没有任何问题但它没有任何好处 - 它会更新&#34; timeInterval&#34; 参数,而不是&#34; timeInterval&#34;循环外的变量。你可以做一个替代方案:
for(var i=0;i<ids.length;i++) {
var timeInterval = (i + 1) * 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
})(i,timeInterval);
}
只是在匿名函数之外进行计算。
编辑 - 请注意,您可能仍会遇到问题,具体取决于运行此代码的上下文。浏览器可能不喜欢这种行为。