


























@@ -38,10 +38,13 @@ let setCommandLaneConcurrency: CommandQueueModule["setCommandLaneConcurrency"];
3838let waitForActiveTasks: CommandQueueModule["waitForActiveTasks"];
39394040function createDeferred(): { promise: Promise<void>; resolve: () => void } {
41-let resolve!: () => void;
41+let resolve: (() => void) | undefined;
4242const promise = new Promise<void>((r) => {
4343resolve = r;
4444});
45+if (!resolve) {
46+throw new Error("Expected deferred resolver to be initialized");
47+}
4548return { promise, resolve };
4649}
4750@@ -145,12 +148,9 @@ describe("command queue", () => {
145148146149vi.useFakeTimers();
147150try {
148-let releaseFirst!: () => void;
149-const blocker = new Promise<void>((resolve) => {
150-releaseFirst = resolve;
151-});
151+const blocker = createDeferred();
152152const first = enqueueCommand(async () => {
153-await blocker;
153+await blocker.promise;
154154});
155155156156const second = enqueueCommand(async () => {}, {
@@ -162,7 +162,7 @@ describe("command queue", () => {
162162});
163163164164await vi.advanceTimersByTimeAsync(6);
165-releaseFirst();
165+blocker.resolve();
166166await Promise.all([first, second]);
167167168168expect(typeof waited).toBe("number");
@@ -255,14 +255,11 @@ describe("command queue", () => {
255255const lane = `reset-test-${Date.now()}-${Math.random().toString(16).slice(2)}`;
256256setCommandLaneConcurrency(lane, 1);
257257258-let resolve1!: () => void;
259-const blocker = new Promise<void>((r) => {
260-resolve1 = r;
261-});
258+const blocker = createDeferred();
262259263260// Start a task that blocks the lane
264261const task1 = enqueueCommandInLane(lane, async () => {
265-await blocker;
262+await blocker.promise;
266263});
267264268265expect(getActiveTaskCount()).toBeGreaterThanOrEqual(1);
@@ -282,7 +279,7 @@ describe("command queue", () => {
282279283280// Complete the stale in-flight task; generation mismatch makes its
284281// completion path a no-op for queue bookkeeping.
285-resolve1();
282+blocker.resolve();
286283await task1;
287284288285// task2 should have been pumped by resetAllLanes's drain pass.
@@ -454,34 +451,28 @@ describe("command queue", () => {
454451const lane = `drain-snapshot-${Date.now()}-${Math.random().toString(16).slice(2)}`;
455452setCommandLaneConcurrency(lane, 2);
456453457-let resolve1!: () => void;
458-const blocker1 = new Promise<void>((r) => {
459-resolve1 = r;
460-});
461-let resolve2!: () => void;
462-const blocker2 = new Promise<void>((r) => {
463-resolve2 = r;
464-});
454+const blocker1 = createDeferred();
455+const blocker2 = createDeferred();
465456const firstStarted = createDeferred();
466457467458const first = enqueueCommandInLane(lane, async () => {
468459firstStarted.resolve();
469-await blocker1;
460+await blocker1.promise;
470461});
471462await firstStarted.promise;
472463const drainPromise = waitForActiveTasks(2000);
473464474465// Starts after waitForActiveTasks snapshot and should not block drain completion.
475466const second = enqueueCommandInLane(lane, async () => {
476-await blocker2;
467+await blocker2.promise;
477468});
478469expect(getActiveTaskCount()).toBeGreaterThanOrEqual(2);
479470480-resolve1();
471+blocker1.resolve();
481472const { drained } = await drainPromise;
482473expect(drained).toBe(true);
483474484-resolve2();
475+blocker2.resolve();
485476await Promise.all([first, second]);
486477});
487478@@ -593,27 +584,24 @@ describe("command queue", () => {
593584);
594585const lane = `shared-state-${Date.now()}-${Math.random().toString(16).slice(2)}`;
595586596-let release!: () => void;
597-const blocker = new Promise<void>((resolve) => {
598-release = resolve;
599-});
587+const blocker = createDeferred();
600588601589commandQueueA.resetAllLanes();
602590603591try {
604592const task = commandQueueA.enqueueCommandInLane(lane, async () => {
605-await blocker;
593+await blocker.promise;
606594return "done";
607595});
608596609597expect(commandQueueB.getQueueSize(lane)).toBe(1);
610598expect(commandQueueB.getActiveTaskCount()).toBe(1);
611599612-release();
600+blocker.resolve();
613601await expect(task).resolves.toBe("done");
614602expect(commandQueueB.getQueueSize(lane)).toBe(0);
615603} finally {
616-release();
604+blocker.resolve();
617605commandQueueA.resetAllLanes();
618606}
619607});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。