fix(core): the game loop stops silently when a library hook throws

未關閉
#478 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
3/5
預估耗時
1-2 天
新手友好度
72/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
typescript
領域
game-dev

研究方向

Start with packages/core/src/application/nanoforge-application.ts lines 95–121, where the async loop runs library hooks and schedules the next tick; inspect the existing stop and teardown paths there. Add coverage under packages/core/test for a throwing hook and for a throwing __clear; done means the loop reports the error, stops cleanly, continues teardown across failing clears, and notifies stop observers.

由索引模型根據 Issue 內容生成。

描述

bug packages:core
Which package is this bug report for?

core

Issue description

loop is an async function scheduled with setTimeout. When a __events / __run hook rejects (for example a system throws inside ecs.runSystems), this.schedule(loop, …) is never reached and the rejection is unhandled. The game freezes with no error, no __clear, no viewport dispose and no onStop for observers such as the editor; on Bun the server process exits. The teardown branch also stops at the first __clear that throws.

Where:

Evidence:

for (const library of orderedForRun) await runHook(library, "__events");
...
for (const library of orderedForRun) await runHook(library, "__run");
...
this.schedule(loop, tickLengthMs + tickStart - Date.now());

Suggested fix: Wrap the tick body in try/catch: log the error, requestStop(), then run the normal teardown, isolating each __clear. Add a test with a throwing hook (packages/core/test has none).

Found during a code audit of main at be72076.

Code sample

No response

Versions
  • Engine main at be72076
  • pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority

High (immediate attention needed)

I have tested this issue on a development release

be72076

主要語言
TypeScript
星號
7
分支
2
平均合併
1 天 17 小時
30 天內合併 PR
17

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

NanoForge-dev/Engine 的其他 Issue

查看 NanoForge-dev/Engine 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。