最后一次编辑(希望):提出了一个更大的问题,如果有人可以回答“为什么下面的代码中的sleep函数不能在执行中提供一个小时的暂停?”。对此有更好的了解可能会有所帮助。
我想触发一个以chrome扩展程序运行的js函数,该函数将连续连续运行1个月,但在8:15 am至9:15 am之间将其执行暂停1小时。
这是我正在尝试的方法,但是没有发生来自sleep()的延迟。
function(){ //triggered on button press, one verrryyyyyyy long process
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) {
}
}
var data_array = ["fake_data1", "fake_data2", /*...*/ "fake_data923421"];
for (let i=0; i<data_array.length; i++){
var today = new Date();
var hours = today.getHours();
var minutes = today.getMinutes();
if(hours >= 8 && minutes >= 15){
sleep(3600000);
}
//do things if it's not 8:15-9:15am
setTimeout(function() {
//things here happen as expected with setTimeout delay
//so far haven't been able to use setTimeout sometimes, but not every time
//hence the sleep() function (also from SO, sorry no credits posted)
}, (i+1)*10000);
}
});
免责声明: -对实现此目标的替代方法非常开放。 -有充分的理由将其用JS编写并连续运行一个月。 -没有用户会在页面上/锁定用户界面无关
奖励积分-这是chrome扩展名,如果有一种方法,我可以将数据不存储在数组中,并在处理完每个值后将其标记出来,因此,如果必须停止此操作,则不会重新执行强制脚本返回“ fake_data1”-太好了。我知道我可以将其存储在数据库中,制作自己的Web服务,然后调用它来做到这一点。不过,宁愿避免这种情况,而是要寻找快速而又容易的方法,因为这很可能是一次性的,非生产的,永远不会再次使用的代码。
答案 0 :(得分:0)
这对于可能会有所帮助的人...我仍然不明白为什么上面的sleep函数对我不起作用,但是我使用了do-while循环对其进行了修改,并且它按预期运行。
function sleep(miliseconds) {
var d = new Date();
var d2 = null;
do { d2 = new Date(); }
while(d2-d < miliseconds);
}