for循環裡面的方法用setTimeOut定時調用

最近寫爬蟲程序時,首先獲得瞭url的list列表,然後循環list去調用獲取對應url的內容,因為在很短時間內頻繁訪問某網站存在一定的問題,所以需要在循環裡面每間隔2s左右再去調用該方法。具體的實現方式記錄如下:

之前的錯誤寫法:

for(var i = 0;i<articleList.length;i++){  
 setTimeOut(ArticelDetail.getAticleDetail(articleList[i].contentId)  
,2000);  
}  

上面的寫法中隻會調用一次中間的函數,所以將循環用遞歸代替,改進後的方法如下:

//用遞歸代替循環每隔2S調用一次詳細信息爬取事件  
var i=0;  
function getDetail() {  
    i++;  
    if(i<articleList.length){  
        setTimeout(function(){  
            ArticelDetail.getAticleDetail(articleList[i].contentId);  
            getDetail();  
        },2000);  
    }  
}  
getDetail();

這樣便可以實現每隔2S調用獲取詳情的方法,並且在該遞歸調用完成後才進行下一步操作。

發佈留言