javascript - 为什么 setInterval 和 clearInterval 在 JS 中不起作用?
问题描述
我是 JS 新手。
我有两张像下面这样的卡,
<div class = "card" id ="c1">
<div class = "content"> </div>
</div>
<div class = "card" id ="c2">
<div class = "content"> </div>
</div>
卡片 1 中的 divcontent
应该显示动态值,而卡片 2 中Date.now()
的divcontent
应该显示静态值。
JS:
function cardData(card) {
myCard(card);
}
function allCardData() {
var cards = document.getElementsByClassName("card");
Array.prototype.forEach.call(cards, (card) => {
cardData(card);
});
}
function mockData(card) {
var setInt;
function caseOne(card, callBackOne) {
callBackOne(card);
}
function caseTwo(card, callBackTwo) {
callBackTwo(card);
}
// SetInterval function
function callBackOne(card) {
setInt = setInterval(function () {
var currentDate = Date.now();
var val = String(currentDate).substr(8, 2);
}, 1000);
}
//clearInterval
function callBackTwo(card) {
clearInterval(setInt);
}
switch(card)
{
case "c1":
return {
target: card,
value: caseOne(card, callBackOne)
}
case "c2":
return {
target: card,
value: caseTwo(card, callBackTwo)
}
}
}
function Callback(value, callback) {
callback(value);
}
function myCard(card) {
Callback(mockData(card), function (data) {
console.log(data);
var target = document.getElementById(data.target);
var content = target.getElementsByClassName('content')[0];
content.innerHTML = data.value;
});
}
//Onload function
window.onload = function () {
allCardData();
};
我在card1和card2中每2S需要一个动态数据。static data Which clears the dynamic value
但是,它不起作用。
因为,回调函数期望return
,当我将函数传递mockData
给回调时。它没有按预期工作。
有人可以帮我to start the dynamic data in card1 and clear the data in card2
吗?
非常感谢。
解决方案
这就是代码的作用:
- 呼吁
allCardData()
_window.onload
allCardData()
使用卡的 ID调用cardData()
找到的每张卡cardData()
myCard()
在中间步骤中调用myCard()
打电话Callback
要mockData()
卡mockData()
调用caseOne()
卡 c1 和caseTwo()
卡 c2caseOne()
设置 2 秒间隔caseTwo()
取消间隔
caseOne()
呼叫和之间没有时间caseTwo()
。他们被互相调用,中间没有时间。这意味着定时器在初始化后立即被取消。2 秒计时器没有时间做任何事情。
建议的解决方案更改caseTwo()
为仅在特定条件过去后清除计时器。否则间隔将永远不会开始。
您可能想在谷歌上搜索async/await,您可能需要更改其他部分的代码:
async function caseTwo(card) {
// asynchronously wait, stopping this function until the value is known
var value = await getValueTwoFromSomewhere();
clearInterval(setInt);
return value;
}
否则代码将需要重写为不同的东西。
也许您想重新考虑您的解决方案并将其作为另一个问题再次发布。
推荐阅读
- javascript - 如何将从json获取的字节数组更改为图像
- angular - Angular NgRx 选择器无法读取未定义的属性
- pandas - 当我记录转换熊猫列时,我得到 NaN,我应该用 0 替换它们吗?
- docker - 由 docker-compose 文件生成的 Kafka 和 Zookeeper 容器中的错误
- elm - 在 git hub 操作中使用 elm-test
- python - python:从ScalarMappable获取整个numpy数组的颜色
- android - 如何在android中解密密码?
- oracle - 使用 PL/SQL 的单选按钮验证
- flask - 使用 @cache.memoize 测试函数会给出 PicklingError
- python - 如何从 ctypes.c_byte 转换或获取确切值