实现一个顺序执行队列Promise

我们可以使用 TypeScript 语言设计一个 SequentialPromiseQueue 类来实现一个按照顺序执行的 Promise 队列。这个类提供了 push、run 和 clear 等方法,可以用来操作队列中的 Promise 实例。其中,run 方法会按照顺序执行队列中的所有 Promise 实例,并返回一个 Promise 实例,该实例的状态将在队列中的所有 Promise 实例都完成后更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class SequentialPromiseQueue {
private promises: Promise<any>[];

constructor() {
this.promises = [];
}

push(promise: Promise<any>) {
this.promises.push(promise);
}

run() {
return this.promises.reduce((acc, promise) => {
return acc.then(() => promise);
}, Promise.resolve());
}

clear() {
this.promises = [];
}
}

测试用例

1
2
3
4
5
6
7
8
9
10
11
12
13
// 创建一个 SequentialPromiseQueue 实例
const queue = new SequentialPromiseQueue();

// 将一些 Promise 实例推入队列中
queue.push(Promise.resolve(1));
queue.push(Promise.resolve(2));
queue.push(Promise.resolve(3));

// 执行队列中的所有 Promise 实例
queue.run().then(result => {
console.log(result); // [1, 2, 3]
});


实现一个顺序执行队列Promise
https://www.ggss.club/2022/12/07/implement-sequential-promise-queue/
作者
Nicol Li
发布于
2022年12月7日
许可协议