【发布时间】:2020-08-10 13:55:29
【问题描述】:
我有一个不同对象的数组,每个对象包含不同值的时间属性。
我想循环这个数组,里面有一个setTimeout函数,时间就是每个对象的时间属性。
因此,我想要的结果是
- 10s 后,打印第一个对象的名称
- 20s 后,打印第二个 obj 的名称。
- ...
- ...
- 5s后,打印最后一个obj的名字。
但是下面的代码会累计执行20s,即time = 5s时打印obj 3 & 5,5s后打印obj 1,10s后打印obj 2 & 4。
const data = [
{name: "Warm up", timeFormat: "00:10", time: 10},
{name: "High interval", timeFormat: "00:20", time: 20},
{name: "Low Interval", timeFormat: "00:05", time: 5},
{name: "High interval", timeFormat: "00:20", time: 20},
{name: "Low Interval", timeFormat: "00:05", time: 5},
]
function renderTimer(data) {
for (let i = 0; i < data.length; i++) {
const eachName = data[i].name;
const eachTime = data[i].time;
setTimeout(() => {
console.log(eachName);
}, eachTime * 1000);
}
}
renderTimer(data);
我的代码有什么问题?或者有什么其他方法可以达到我想要的结果?
非常感谢!
【问题讨论】:
-
只是为了确定,您希望对象的超时在前一个对象的超时结束后开始?
-
是的,obj 1中的时间结束后,根据它的时间执行obj 2
标签: javascript html settimeout