javascript - 如何使用提供的时间戳执行任务?
问题描述
我有一个这样的任务列表:
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]
应该运行,依此类推。您可以假设任务是按时间排序的。我怎样才能做到这一点?某种计时器?
解决方案
您可以使用异步超时功能和循环。更新:简化答案,添加内联注释。
// 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();
推荐阅读
- h2o - 在 Windows 中的水流中构建模型,在 AIX 服务器上使用?非程序员的帮助
- swift - 无法将类型“(JournalListViewController)->()-> JournalListViewController”的值分配给类型“JournalListViewController?”
- python - 如何修复'AttributeError:'dict'对象没有属性'code'
- python - Python Turtle,更改可见部分
- c# - 在 C# 中使用 Tesseract
- java - 通过 DNS 检查互联网连接
- node.js - webpack 输出丢弃依赖项
- jenkins - Jenkins插件动态填充下拉
- clojure - clojure-spec:无法正确获取函数的后置条件
- php - 自定义 WooCommerce 登录表单用户字段