我正在制作一个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++;
}
,
- getlist()获取指令列表并拆分为siteArray。
- gotoUrl()更改url。
- 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的洞察力