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