Skip to content

v2.4.6 — 扫码账号每次打开都空白

Choose a tag to compare

@XDTrees XDTrees released this 23 Oct 12:05
· 7 commits to main since this release

2.4.4/2.4.5 之后侧栏能进、能滚了,但扫码过的渠道在账号池里经常整片空白,重开也一样。磁盘上账号是齐的(state.json 里 15 条),所以问题全在读取链。

16 秒的事实抓取把首屏挡掉了

load() 里先 await fetchChannelModels(...) 再 setEntries(...)。那次采样测到 16.5 秒——它要把每个模型逐个交给宿主适配器解析上下文窗口,冷启动时很慢。卡片区在这十几秒里是空的,看起来就像「没有账号」。

改成两阶段:provider.status 与 account.list 先回来(几十毫秒),卡片立刻渲染;事实(窗口/识图)随后合并进去。

失败被渲染成了「空」

provider.status 是「哪些渠道有账号」的唯一判据。它一旦整段返回 401,scanProviders 就是空的,entries 也是空的,组件走到 if (entries.length === 0 && error === undefined) return <></> —— 静默渲染空白,一个字都不说。读者无法区分「还没扫码」和「读取失败」。

现在保留原始信封判 ok:真的读失败就把错误显示出来。

RPC 桥只捕获一次

callPack 必须走 ctx.connection.rpc(裸 fetch('/api/channel-pack') 被宿主 401,因为 /api/* 只允许经 admission 的客户端)。但 installPackRpc(ctx) 在 apply() 里只跑一次,而提供 connection 的是另一个 fiber——那一刻没就绪,桥就永久为空,此后所有 callPack 都回落裸 fetch 吃 401,正好触发上一条的静默空白。

改为保存 ctx、每次调用前惰性解析,就绪后自动恢复。每一步仍各自 try:宿主给客户端 ctx 套的 Proxy 对未声明服务的属性访问会抛异常(并上报运行失败),?. 挡不住抛异常的 getter,只有 ctx.get() 豁免。

其他

  • 全套 79 文件 1023 用例。