返回包含每个已设置超时的超时对象的数组
2022-09-29
466
因此,我被要求用 JS 编写一个函数,该函数将接受一个回调数组和一个延迟数组,该数组为数组中的每个回调及其相应的延迟设置超时。 这是我拥有的代码,它检查了至少一个相应回调和延迟的解决方案:
function batchTimeouts(callbacks, delays) {
for(let i = 0; i < 3; i++){
setTimeout(callbacks[i], delays[i]);
}
}
问题是它应该返回一个数组,其中包含每次调用 setTimeout 后返回的超时对象。我不太确定我在做什么,我尝试过在不同的部分重写它,但最终我得到了一个 TypeError:无法读取未定义的属性。 我学得有点慢,所以我很感激任何帮助或提示!
编辑:我忘了添加示例!
Example:
const sayHello = () => console.log('hi');
const sayGoodbye = () => console.log('bye');
const shout = () => console.log('WHAT?');
const tasks = [sayHello, sayGoodbye, shout];
const delays = [500, 200, 900];
const timeoutObjs = batchTimeouts(tasks, delays);
// should print:
// 'bye' after 200 ms
// 'hi' after 500 ms
// 'WHAT?' after 900 ms
console.log(timeoutObjs); // [ Timeout {...}, Timeout {...}, Timeout {...} ]
2个回答
这有效吗?只需创建一个包含超时的数组并返回它即可。
function batchTimeouts(callbacks, delays) {
const timeouts = [];
for(let i = 0; i < 3; i++){
timeouts.push(setTimeout(callbacks[i], delays[i]));
}
return timeouts;
}
const sayHello = () => console.log('hi');
const sayGoodbye = () => console.log('bye');
const shout = () => console.log('WHAT?');
const tasks = [sayHello, sayGoodbye, shout];
const delays = [500, 200, 900];
const timeoutObjs = batchTimeouts(tasks, delays);
console.log(timeoutObjs);
twharmon
2022-09-29
- 我不确定
const sayHello = () => console.log('hi');
const sayGoodbye = () => console.log('bye');
const shout = () => console.log('WHAT?');
const tasks = [sayHello, sayGoodbye, shout];
const delays = [500, 200, 900];
const timeoutObjs = batchTimeouts(tasks, delays);
function batchTimeouts(tasks, delays) {
return tasks.map((task, index) => {
setTimeout(task, delays[index]);
const obj = [
task,
delays[index]
]
return obj;
})
};
console.log(timeoutObjs);
这是否是您要找的解决方案,但这是我的想法。任何高级开发人员都可以随意编辑正确或更好的解决方案。
- 您需要做的就是创建一个函数,然后循环遍历多个任务并使用其索引指出延迟,使用数组的 map() 函数返回一个新数组。
Nexo
2022-09-29