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



我正在制作一个chrome扩展web自动化。第一步是以分隔符格式从服务器获取站点和指令列表。一旦列表被获取,它就被分成一个数组,我称之为"siteArray"。

站点数组然后被分成另一个名为"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()更改url。
  3. sleep()运行sleep函数

是否有更好的方法来实现持续时间/等待/延迟

修改遍历数组的方式:处理一个条目,设置计时器,重复。

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

经过深思熟虑,我已经解决了这个问题。使用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的洞察力

最新更新