我正在为网络自动化制作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++;
}
哪里
是否有更好的方法来实施持续时间/等待/延迟。
答案 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的见解。