开发者问题收集

返回包含每个已设置超时的超时对象的数组

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