1. 程式人生 > >for迴圈裡面的方法用setTimeOut定時呼叫

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呼叫獲取詳情的方法,並且在該遞迴呼叫完成後才進行下一步操作。