首页 > 解决方案 > 如何使用提供的时间戳执行任务?

问题描述

我有一个这样的任务列表:

const tasks = [
  {
    time: 0,
    consoleLog: "Start",
  },
  {
    time: 3,
    consoleLog: "3 seconds passed",
  },
  {
    time: 4,
    consoleLog: "1 second since last has passed",
  },
  {
    time: 8,
    consoleLog: "Final console log",
  },
];

时间以秒为单位指示应该运行任务的时间(在这种情况下,consoleLog应该是控制台记录的。

所以,在 0 秒时,tasks[0]应该运行,然后在 3 秒时,task[1]应该运行,依此类推。您可以假设任务是按时间排序的。我怎样才能做到这一点?某种计时器?

标签: javascript

解决方案


您可以使用异步超时功能和循环。更新:简化答案,添加内联注释。

// Task list
const tasks = [
  {
    time: 0,
    consoleLog: "Start",
  },
  {
    time: 3,
    consoleLog: "3 seconds passed",
  },
  {
    time: 4,
    consoleLog: "1 second since last has passed",
  },
  {
    time: 8,
    consoleLog: "Final console log after 4 secs from last task and 8 secs from start of loop",
  }
];

// Your mini app
const APP = {
  // App logic
  init: async () => {
    // Init last time variable
    let lastTime = 0;
    // Loop
    for(task of tasks) {
      //
      // Here control timeouts...
      // Calculate current timeout
      const timeout = task.time - lastTime;
      // Wait for timeout to complete
      await APP.timeout(timeout * 1000);
      // Update last time variable
      lastTime = task.time;
      //
      // Here check task type and add it's logic...
      // If console log task
      if(task.consoleLog) {
        // Do console log
        console.log(task.consoleLog);
      }
      // If another task type
      if(task.anotherTask) {
        // ...
      }
    }
  },
  // Timeout function
  timeout: (ms) => new Promise(resolve => setTimeout(resolve, ms))
};

// Test
APP.init();


推荐阅读