我正在尝试从某些网站(例如“ 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的最后一个元素相对应的文件,而不是全部。
如何使循环对id中的每个元素起作用?
PS:我已经尝试过在不同相关问题中给出的各种解决方案,但是没有一个可以带来理想的结果,因此我不得不将其发布为不同的问题。

最佳答案

您正在匿名函数的末尾更新“ timeInterval”参数,尽管该语句没有任何问题,但它没有任何用处-它会更新“ timeInterval”参数,而不是循环外的“ timeInterval”变量。您可以将其作为一种替代方法:

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);
}


只是在匿名函数之外进行计算。

编辑-请注意,根据这段代码的运行环境,您仍然可能会遇到问题。浏览器可能不喜欢这种行为。

10-06 04:39