任务队列
队列的特点就是先进先出
先开始的任务执行完后,才能开始执行后续任务
另外任务队列中有任务时是自动执行的。
另外提一点,实现稍微复杂一点功能,全都是闭包!!
设计:new一个队列,返回值是一个function,这个function的入参为为task(类型promise),返回值也是promise
const queue = new Queue();
queue(task1).then(data=>console.log(data));
queue(task2).then(data=>console.log(data));
//始终都是task1的结果先输出
- 实现一个先进先出的普通队列
class Queue {
constructor() {
let waitingQueue = [];
let isRunning = false;//记录是否有未完成的任务
function execute(task, resolve, reject) {
task()
.then((data) => {
resolve(data);
})
.catch((e) => {
reject(e);
})
.finally(() => {
//等待任务队列中如果有任务,则触发它;否则设置isRunning = false,表示无任务状态
if (waitingQueue.length) {
const next = waitingQueue.shift();
execute(next.task, next.resolve, next.reject);
} else {
isRunning = false;
}
});
}
return function(task) {
return new Promise((resolve, reject) => {
if (isRunning) {
waitingQueue.push