Web自动化chrome扩展的延迟逻辑(Javascript)

时间:2016-08-17 17:22:19

标签: javascript google-chrome google-chrome-extension delay sleep

我正在为网络自动化制作Chrome扩展程序。第一步是以分隔符格式从服务器获取网站和说明列表。 一旦获得列表,它就被分成一个我称之为#34; siteArray"的数组。

然后将网站数组划分为另一个数组,我调用" instructionsArray" 在阵列中的那些项目中,其中一个是在网站上花费的持续时间,即instructionsArray [5]的值为" 10"秒。 {所有网站的持续时间不一样}

我的问题是如何延迟(实施持续时间)

我发现一个实现是使用睡眠函数,因为它只是一个 long for loop

,效率很低

见代码:

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()运行睡眠功能。
  4. 是否有更好的方法来实施持续时间/等待/延迟。

2 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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);

但是以动态的方式。

count变量是processNext函数的变化:

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

我感谢wOxxOm的见解。