fix(cli): waitForever must keep the event loop alive (#85694) · openclaw/openclaw@eca9645
m1qaweb
·
2026-05-23
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -10,7 +10,7 @@ import {
|
10 | 10 | import { waitForever } from "./wait.js"; |
11 | 11 | |
12 | 12 | describe("waitForever", () => { |
13 | | -it("creates an unref'ed interval and returns a pending promise", () => { |
| 13 | +it("keeps the event loop alive (ref'd interval) and returns a pending promise", () => { |
14 | 14 | const unref = vi.fn(); |
15 | 15 | const interval = { unref } as unknown as ReturnType<typeof setInterval>; |
16 | 16 | const setIntervalSpy = vi.spyOn(global, "setInterval").mockReturnValue(interval); |
@@ -20,7 +20,11 @@ describe("waitForever", () => {
|
20 | 20 | const [callback, delay] = setIntervalSpy.mock.calls[0] ?? []; |
21 | 21 | expect(typeof callback).toBe("function"); |
22 | 22 | expect(delay).toBe(1_000_000); |
23 | | -expect(unref).toHaveBeenCalledTimes(1); |
| 23 | +// Regression guard for the previous `.unref()` bug: an unref'd interval |
| 24 | +// does NOT keep the event loop alive, so `await waitForever()` would |
| 25 | +// exit immediately with code 13 ("unsettled top-level await"). The |
| 26 | +// function must NOT unref the interval. |
| 27 | +expect(unref).not.toHaveBeenCalled(); |
24 | 28 | expect(promise).toBeInstanceOf(Promise); |
25 | 29 | } finally { |
26 | 30 | setIntervalSpy.mockRestore(); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。