`naptha/tesseract.js` 的技术错误报告和优化建议

作者: codeCraft-Ritik创建于 2026年9月13日更新于 2026年9月13日

" naptha/tesseract.js " 技术错误报告和优化建议

该文件载有3个关键、影响很大的错误报告和在`sectract.js'代码库中发现的建筑改进。 每期以专业的GitHub issue / Pull Request格式编排,并配有根因分析,复制码,基准证据,和滴入码修正等功能.

-- -- . . .

问题:`创造者()' 通过未处理的信件倾听器例外, 无限期地挂起初始化失败和崩溃进程

  • ** 严重性**:临界值(P1)
  • ** 组件**:核心API(`src/createWorker.js')
  • ** 受影响的版本**:v5.x'-v7.0.0+`'
  • 标签:bug'、api'、error-oblease'、crash'

-- -- . . .

□ 1. 总结 当Tesseract.create Worker ()'在语言数据获取过程中遇到任何错误(例如,HTTP 404,网络下线,CDN超时,被损坏的训练数据,或无支持的OCR引擎模式)时,返回的Promise ' 从未无限期结算和挂起。 在标准“try/catch”区块中包装“await create Worker(.)”永远不会赶上失败。

此外,如果打电话者在选项中不提供errorHandler',则create Worker.js'在同步工人消息'事件处理器内执行扔出错误(数据)'。 由于这个错误被抛出一个事件调度器内的"承诺"执行上下文之外,它触发了Node.js("process.nextTick ( ()) {抛出错误;}") 或浏览器中未处理的错误事件,崩溃了整个主机应用程序.

-- -- . . .

□ 2. 根源分析

在[`src/createWorker.js' (文件:///C:/Users/ritik/.Gemini/antigravity/scratch/tsesseract.js/src/createWorker.js#L202-L245)中:

工人拒绝'只要求行动'负载' [JavaScript] // src/createWorker.js (行202-222) (中文(简体) ). 关于Message(工人,({) 工人身份、工作身份、状况、动作、数据 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? Const promiseId = ${行动}-${jobId}`; 如果(状态 QQ'resolve') { . . . . . . . . } 如果( 状态 QQ' reject) { promise[promiseId].reject(数据); 删除承诺[保证]; if (action QQ"load") 工人 Resreject(数据); // <---BUG: 只有处理动作QQ"load" ! 如果( errorHandler) { 错误汉德勒(数据); 否则 抛出错误( 数据); // <--- BUG: 未抓取的抛出内部事件倾听器 ! {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

  • ;

QQ Flaw B:初始化承诺链被吞弃
```2ZZ
// src/createWorker.js (239-245行) (中文(简体) ).
装入内部( )
.then (( ()) 装入内置( 长) )
.then( () Q) 初始化 Internal( lags, oem, 配置) )
.then( ( ()) 工人ResResolve(resolveObj)) (中文(简体) ).
.catch( ( ()) QQ; // <--- BUG:沉默地吞入错误! 永远不要拒绝工人Res!

返乡工人Res;

当“装入语言”失败(例如404网络)时:

  1. 工人发出QQ状态:"拒绝",动作:"装入语言",数据:"网络错误.".
  2. 行动'负载'评价虚假',因此`工人拒绝(数据)'从未援引
  3. 第243行 " Language Internal () " 拒绝,但被 ".catch (( ()) QQ) " 所捕获。 . . . . . . .

内容来源: naptha/tesseract.js