update()我有一个每隔 5 秒调用一次的函数:
setInterval(function() {
update();
}, 5000);
Run Code Online (Sandbox Code Playgroud)
然而,我的目标是在加载时立即调用该函数,然后每 5 秒调用一次。如何在 javascript 或 jQuery 中实现这一目标?
我是 Angular(6) 的新手。setInterval我在组件中使用函数。它正在工作,但是当我导航到另一条路线时,它setInterval会继续执行。请帮我查明原因。
//Calling it in ngOnit()
autosavedraftsolution() {
setInterval(() => {
console.log(this.draftSolutionForm);
if (this.solutionTitleValid) {
this.savedraftsolution();
}
}, this.autoSaveInterval);
}
//savedraftsolution()
savedraftsolution() {
console.log("saving..");
this.connectService.saveDraftSolution({
Title: this.draftSolutionForm.get('Title').value,
Product: this.draftSolutionForm.get('Product').value
} as Draftsolution).subscribe(draftsol => {
console.log("saved");
});
}
Run Code Online (Sandbox Code Playgroud)
它不断在控制台中向我显示“正在保存..”和“已保存”消息。
我创建了一个页面,其中 div 的背景颜色经常变化。我想做到这一点,以便当鼠标悬停(或悬停)时,只要鼠标悬停在那里,颜色变换器就会在其所在的位置暂停。当鼠标不再悬停在 div 上时,颜色会继续从上次停止的位置发生变化。我在这个网站上遇到的最接近的例子使用了 JQuery 解决方案。我不是在寻找 JQuery 解决方案。我正在寻找一个 JavaScript 解决方案。我感谢您的所有回复。谢谢你!
var dammit = document.getElementById("muck");
var colorChange = document.getElementById("color-changer");
var colors = ["red", "blue", "green", "pink"];
var counter = 0;
function changer() {
if (counter >= colors.length) {
counter = 0;
};
colorChange.style.background = colors[counter];
counter++;
};
var myTimer = setInterval(changer, 3000);Run Code Online (Sandbox Code Playgroud)
body {
background: #FDCA40;
margin: 0;
padding: 0;
-webkit-transition: background 0.9s;
-moz-transition: background 0.9s;
transition: background 0.9s;
}
div#muck {
width: 100%;
height: 100vh;
}Run Code Online (Sandbox Code Playgroud)
<body id="color-changer">
<div …Run Code Online (Sandbox Code Playgroud)假设我想一个接一个地运行多个计时器函数,即首先一个函数运行 5 分钟,然后在第一个倒计时完成后,另一个计时器开始再运行 2 分钟。
我实现了定时器功能如下
function timer(count) {
console.log(count)
let counter = setInterval(() => {
count = count - 1;
if (count < 0) {
clearInterval(counter);
return;
}
console.log(count)
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
然后当我用不同的参数调用这个函数两次时
timer(15);
timer(5);
Run Code Online (Sandbox Code Playgroud)
我得到的输出为
15
5
14
4
13
3
11
1
10
0
9
8
.
.
0
Run Code Online (Sandbox Code Playgroud)
然而我想要的输出是
15
14
.
.
2
1
0
5
4
3
2
1
0
Run Code Online (Sandbox Code Playgroud) 我尝试过React的useEffect功能
useEffect(() => {
setInterval(() => {
const time =
Date.parse(untilDeadline.deadline) - Date.parse(new Date());
setuntilDeadline((prevValue) => {
return {
...prevValue,
seconds: Math.floor((time / 1000) % 60),
minutes: Math.floor((time / 1000 / 60) % 60),
hours: Math.floor((time / (1000 * 60 * 60)) % 24),
days: Math.floor(time / (1000 * 60 * 60 * 24)),
};
});
}, 1000);
}, []);
Run Code Online (Sandbox Code Playgroud)
没有 [] 就崩溃了,到底为什么?
我不知道怎么回事。这是我的代码:
setInterval(testI(),1000);
function testI(){
console.log("I ran");
}
Run Code Online (Sandbox Code Playgroud)
然后它运行该函数一次但不重复。我尝试在 chrome 和 firefox 中运行它并得到相同的结果。我很困扰。
在我的代码中,我遇到一些间隔问题。我有这样的情况
import { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
function handleClick() {
const timer = setInterval(() => {
if (count >= 10) {
clearInterval(timer);
} else {
setCount((prevCount) => prevCount + 1);
}
}, 1000);
}
return (
<>
<button onClick={handleClick}>start</button>
<p>{count}</p>
</>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
我想做的是当用户单击按钮时启动一个间隔,并在计数器达到 10 时停止它,但它永远不会停止,调试器说内部setInterval计数始终为 0。有人知道问题是什么吗?我还发现,如果我class像这样将组件重写为组件
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0,
};
}
handleClick() {
let …Run Code Online (Sandbox Code Playgroud) 我正在尝试每“t”分钟实现一次自动刷新访问令牌;我在 useEffect (在根组件中)中实现了 setInterval,它发送对新访问令牌的请求。当我运行代码时,有时间隔从 onMount 开始,有时根本不运行。
我遇到的另一个问题是,当我将用户重定向到登录页面时,我尝试清除间隔,即使在clearInterval之后它仍然继续运行。
如果有任何其他方法可以按设定的时间间隔实现 JWT 刷新令牌,我也愿意接受。
useEffect(() => {
async function getRefreshToken() {
const response = await axios.post("http://localhost:3001/refreshToken", {refreshToken}, {withCredentials: true})
if (response.data.redirect) {
clearInterval(refresh)
history.replace(`${response.data.redirect}`)
localStorage.clear()
}}
const refresh = setInterval(getRefreshToken, 4000)
}, [])
Run Code Online (Sandbox Code Playgroud) 因此,我正在为我的一个项目制作一个倒计时组件,以查看用户可以再次执行某操作之前剩余的时间。我有以秒为单位的时间差,并将秒数发送到我的倒计时组件。这就是我的倒计时组件的样子。
所以现在我什至没有使用时间差来进行测试,我只是做了 5000 秒。
let [timerClock, setTimerClock] = useState(5000);
useEffect(() => {
setInterval(function() {
console.log("minus: ", timerClock)
setTimerClock(timerClock - 1);
}, 1000)
}, [timerClock]);
Run Code Online (Sandbox Code Playgroud)
因此,在最初的 10 秒内,一切正常,但在最初的几秒钟后,它开始出现故障,无法正常工作。它会在相同的数字内上下波动,并且在两者之间开始变得更快。所以说它从 5000 开始,一旦达到 4990 左右,它将开始在 4990、4991、4993 等之间反弹,然后由于某种原因而下降,并且完全出现故障。难道我做错了什么?在我看来,它应该起作用,只是不了解发生了什么。
这是我的辅导员的图像,你可以看到它没有正确倒计时,这次它搞砸了。
setinterval ×10
javascript ×9
reactjs ×4
angular ×1
angular6 ×1
countdown ×1
debugging ×1
function ×1
jquery ×1
setstate ×1
settimeout ×1
timer ×1
use-effect ×1