0

我正在爲網絡自動化製作一個Chrome擴展。第一步是以分隔符格式從服務器獲取站點和指令列表。 一旦獲得列表,它被分成一個數組,我稱之爲「siteArray」。Web自動化Chrome擴展(Javascript)的延遲邏輯

然後將站點數組分成另一個數組,我稱之爲「instructionsArray」 ,在數組中的這些項中,其中一個是站點上的持續時間,即instructionsArray [5]的值爲「10」秒。 {持續時間不是所有的網站一樣}

我的問題是如何延緩(執行長)

一種實現,我發現使用睡眠功能,其結果是低效率的,因爲它只是 for循環

見代碼:

function sleep(milliseconds) { 
    var start = new Date().getTime(); 
    for (var i = 0; i < 1e7; i++) { 
    if ((new Date().getTime() - start) > milliseconds){ 
     break; 
    } 
    } 
} 

然後:

getlist(); 

for each(siteArray){ 
instructionsArray = siteArray[count].split(delimiter); 
gotoUrl(instructionsArray[1]); 
sleep(instructionsArray[5]); 
count++; 
} 

  1. 的GetList()獲取的指令列表,並分成了 siteArray。
  2. gotoUrl()更改網址。
  3. sleep()運行睡眠功能。

有沒有更好的方法來實現持續時間/等待/延遲。

+0

可能重複[睡眠/暫停/等待在Javascript](http://stackoverflow.com/questions/7854820/sleep-pause-wait-in-javascript) – wOxxOm

+0

@wOxxOm使用setTimeout對我沒有奏效。因爲循環中的設置超時將同時添加要訪問的url1和url2 –

回答

0

經過多少考慮後,我已經解決了這個問題。 使用我想出了這個「子的想法」 wOxxOm的主意,以創建多個超時即

for(index = 1;index<(siteArray.length);index++){ 
      instructionsArray = siteArray[index].split(delimiter); 
      bigtime+=instructionsArray[5]; 
      setTimeout(function(){processNext(count)},bigtime); 

     } 

此代碼爲每個站點創建多個超時功能。 類似於:

setTimeout(function(){processNext(count)},10 sec); 
setTimeout(function(){processNext(count)},10+10 sec); 
setTimeout(function(){processNext(count)},10+10+10 sec); 

但以動態的方式。

計數變量是processNext功能變化:

processNext(count){ 
instructionsArray = siteArray[count].split(delimiter); 
visitUrl(instructionsArray[1]); 
count++; 
} 

我稱謝wOxxOm的洞察力。

0

返回您遍歷數組的方式:處理一個條目,設置一個計時器,重複。

var count = 0; 
processSite(); 

function processSite() { 
    if (count >= siteArray.length) { 
     console.log('all done!'); 
     return; 
    } 
    var instructionsArray = siteArray[count].split(delimiter); 
    count++; 
    gotoUrl(instructionsArray[1]); 
    setTimeout(processSite, instructionsArray[5]); 
}