javascript - 如何在 JavaScript 中每 5 分钟循环调用两个交替函数?
问题描述
承认该setTimeout()
方法是异步的,因此从这个开始:
for (var i = 1; i <= 3; i++) {
(function(i) {
setTimeout(function() {
console.log(i + " second(s) elapsed");
}, i * 1000);
})(i);
}
我想用一些东西来代替 console.log()
window.open("https://www.twitter.com","_self")
或者document.getElementById("myFirstID").click();
和
window.open("https://www.facebook.com","_self")
或document.getElementById("mySecondID").click();
,
交替调用,每个延迟例如 5 分钟,但需要一些帮助来替换它而不破坏它:-) 所以我问。
这是一个早期(但不成功)的尝试:
i=0;
while(i < 100)
{
setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
setTimeout(function(){ window.open("https://www.cnn.com","_self") }, 3000);
i++
}
tldr;
也想过用switch()
语句
也可以看看:
解决方案
您可以有两个函数在超时时互相调用,就像这样。您还可以跟踪计时器,以防您想在事件发生时或在一定时间后停止它。
function toggleCalls () {
var timer = {timeout: null};
function callA () {
console.log("A Called");
timer.timeout = setTimeout(callB, 1000);
}
function callB () {
console.log("B Called");
timer.timeout = setTimeout(callA, 1000);
}
callA();
return timer;
}
var timer = toggleCalls();
setTimeout(function () {
clearTimeout(timer.timeout);
console.log("stopped");
}, 5000);
推荐阅读
- javascript - 在 ion-searchbar 中搜索另一个项目时如何检查已检查的项目?
- html - 我如何将我的汉堡菜单变成 9 个点?
- wpf - 悬停时更改 ComboboxItem 的前景
- julia - 让Juno实现新安装的Julia版本
- json - Python - 使用嵌套列转换嵌套 JSON
- c++ - C++ std::regex 不支持前瞻反向引用
- stored-procedures - 从没有凭据的存储过程调用 sqlcmd
- html - CSS:过渡只影响最后一个元素
- python - Django Rest Framework 字符串序列化器列表
- java - 如何在 Keycloak 中添加自定义 FTL 页面?