diff --git a/client/src/utils/promise-queue.js b/client/src/utils/promise-queue.js index 3c36e9972f9..4fb3db7a709 100644 --- a/client/src/utils/promise-queue.js +++ b/client/src/utils/promise-queue.js @@ -11,7 +11,7 @@ export class LastQueue { this.pendingPromise = false; } - enqueue(action, ...args) { + async enqueue(action, ...args) { return new Promise((resolve, reject) => { this.nextPromise = { action, args, resolve, reject }; this.dequeue(); diff --git a/client/src/utils/promise-queue.test.js b/client/src/utils/promise-queue.test.js new file mode 100644 index 00000000000..69d8c1396a1 --- /dev/null +++ b/client/src/utils/promise-queue.test.js @@ -0,0 +1,22 @@ +import { LastQueue } from "./promise-queue"; +const x = 10; +const lastQueue = new LastQueue(x); + +async function testPromise(args) { + return new Promise((resolve) => resolve(args)); +} + +describe("test last-queue", () => { + it("should only resolve the first and last promise", async () => { + const results = []; + for (let i = 0; i < x; i++) { + lastQueue.enqueue(testPromise, i).then((response) => { + results.push(response); + }); + } + await lastQueue.enqueue(testPromise, x).then((response) => { + results.push(response); + }); + expect(results).toEqual([0, x]); + }); +});