用JS写函数enqueue(task)实现任务添加和调度逻辑
时间: 2024-04-17 17:25:04 浏览: 29
可以使用 JavaScript 实现一个简单的任务队列和调度逻辑,以下是一个示例:
```javascript
const taskQueue = [];
let isProcessing = false;
function enqueue(task) {
taskQueue.push(task);
if (!isProcessing) {
isProcessing = true;
processTasks();
}
}
function processTasks() {
if (taskQueue.length === 0) {
isProcessing = false;
return;
}
const task = taskQueue.shift();
task().then(() => {
processTasks();
});
}
```
上面的代码中,我们定义了一个任务队列 `taskQueue`,用于存储待执行的任务。`enqueue` 函数用于将任务添加到队列中,并启动任务调度逻辑。
当调用 `enqueue` 函数时,它会将传入的任务函数 `task` 添加到任务队列中,并检查是否有任务正在执行。如果当前没有任务在执行,它会将 `isProcessing` 标志设为 `true`,并调用 `processTasks` 函数来处理任务。
`processTasks` 函数首先检查任务队列的长度,如果队列为空,则将 `isProcessing` 标志设为 `false`,表示没有任务在执行。如果队列不为空,则从队列中取出第一个任务,并执行它。这里假设每个任务是一个返回 Promise 的函数,并在任务完成后通过 `.then()` 方法继续调用 `processTasks` 函数,实现连续任务的调度。
这样,通过调用 `enqueue` 函数来添加任务,当任务队列中有任务时,会依次执行任务,并按顺序调度执行下一个任务。当队列为空时,停止任务调度。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)