【发布时间】:2021-08-08 04:35:11
【问题描述】:
我有以下数组。[{startColor:"red",event:"start",time:0.3},{stopColor:"blue",event:"stop",time:10},{startColor:"green",event:"start",time:40}]。我正在循环遍历数组,对于每个 settimeout 时间段,我想使用 settimeout 在每个数组元素的时间部分冻结该给定时间段的代码,并显示数组元素中秒数的相应颜色。 .例子 。对于每个数组元素 settimeout(function, time_from_the_element) 。我面临的挑战是,它正在循环,但在第一个元素被循环后, settimeout 不会为第二个元素重新启动。也就是说,假设第一个元素需要 14 秒,下一个元素需要 16 秒,因此在前 14 秒之后,只需要两秒即可调用下一个元素,尽管我希望在前 14 秒之后,settimeout 在 0 处重新开始,并且数到 16 再等等。我花了一整天的时间来尝试解决它。
我面临的另一个挑战是,在数组中的最后一个循环之后,我想从显示中清除最后一个元素的颜色。那是在最后一个元素被循环之后,这看起来很棘手。
注意:setClockBackgrouco 和 setbackgroucol 是用于显示颜色的函数,在这种情况下可以用 console.log 替换。
const changeColors = async () => {
const dat2 = await new Promise((resolve) => {
for (let i = 0; i < data.length; i++) {
console.log("data i is:", data[i]);
if (data[i].event === "start") {
setTimeout(() => {
console.log("Start: ", data[i].event);
setClockBackgroucol(null);
setbackgroucol(data[i].startColor);
}, data[i].programtime * 1000);
} else if (data[i].event === "stop") {
setTimeout(() => {
console.log("Stop: ", data[i].event);
setClockBackgroucol(data[i].stopColor);
setbackgroucol(null);
console.log(
"time taken is ",
data[i].time. * 1000
);
}, data[i].time * 1000);
}
console.log("should have been called last");
}
});
};
【问题讨论】:
标签: javascript arrays loops settimeout