Javascript while setTimeout
Javascript while setTimeout
我想制作一个 GreaseMonkey 脚本。我想在结束时有一个 setTimeout
,但我不知道该怎么做。
run();
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 6){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
setTimeout("run()", 3000);
}
}
}
使用此代码,问题是 setTimeout
不工作并且没有像预期的那样等待 3 秒。
我尝试了其他方法,但没有任何效果。
编辑
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 2){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
}
}
}
setInterval(run, 6000);
我试过了。它每 6 秒运行一次,但我在网站上遇到错误,我可以在一秒钟内点击超过 5 次。所以当我打开页面时等待 6 秒,点击后,我得到错误。它不是喷射工作。 :(
这里有一些问题。
首先,虽然 setTimeout 可以接受一个函数作为其第一个参数,但您可能希望将函数作为参数传递,而不是执行该函数,因此您应该将 "run()"
替换为 run
。
其次,我不太确定您为什么要递归 - 为什么 setTimeout
在 run()
中?不要将它放在 运行 函数中,而是尝试将它放在底部,并删除顶部的 run()
调用。据我所知,这段代码完全没有理由需要递归。
如果您希望它只触发一次:
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setTimeout(run, 3000);
按照你现在写的方式,它会每 3 秒重复一次。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
setTimeout(run, 3000);
}
run();
但是 setInterval 会达到相同的结果。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setInterval(run, 3000);
编辑
用户想看看如果从回调函数内部调用 setInterval 会发生什么。请注意,间隔数每 3 秒呈指数增长。
setInterval 导致函数 运行 every 3 秒,而 setTimeout 导致函数 运行 once 3秒后。
var numberOfIntervals = 0;
function run(){
setInterval(run, 3000);
numberOfIntervals++;
console.log(numberOfIntervals);
}
run();
我想制作一个 GreaseMonkey 脚本。我想在结束时有一个 setTimeout
,但我不知道该怎么做。
run();
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 6){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
setTimeout("run()", 3000);
}
}
}
使用此代码,问题是 setTimeout
不工作并且没有像预期的那样等待 3 秒。
我尝试了其他方法,但没有任何效果。
编辑
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 2){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
}
}
}
setInterval(run, 6000);
我试过了。它每 6 秒运行一次,但我在网站上遇到错误,我可以在一秒钟内点击超过 5 次。所以当我打开页面时等待 6 秒,点击后,我得到错误。它不是喷射工作。 :(
这里有一些问题。
首先,虽然 setTimeout 可以接受一个函数作为其第一个参数,但您可能希望将函数作为参数传递,而不是执行该函数,因此您应该将 "run()"
替换为 run
。
其次,我不太确定您为什么要递归 - 为什么 setTimeout
在 run()
中?不要将它放在 运行 函数中,而是尝试将它放在底部,并删除顶部的 run()
调用。据我所知,这段代码完全没有理由需要递归。
如果您希望它只触发一次:
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setTimeout(run, 3000);
按照你现在写的方式,它会每 3 秒重复一次。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
setTimeout(run, 3000);
}
run();
但是 setInterval 会达到相同的结果。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setInterval(run, 3000);
编辑
用户想看看如果从回调函数内部调用 setInterval 会发生什么。请注意,间隔数每 3 秒呈指数增长。
setInterval 导致函数 运行 every 3 秒,而 setTimeout 导致函数 运行 once 3秒后。
var numberOfIntervals = 0;
function run(){
setInterval(run, 3000);
numberOfIntervals++;
console.log(numberOfIntervals);
}
run();