ai-chatbot/lib/client/canvas-save-queue.ts
WuYongJie 6b7b24a86e 修复图片工具提交前的画布同步与结果合并
新导入或新生成的图片在自动保存前点击去水印,会因服务端缺少节点而失败。工具栏统一先保存当前画布,保存成功后再调用处理能力;处理与自动保存共用队列,结果合并保留等待期间的本地编辑并更新保存版本。适用于去水印、抠图、增强、扩图和图层拆分。

验证:14 项画布能力与提交同步测试通过,覆盖保存失败不提交、执行期间编辑保留、上游失败和切换画布;TypeScript 检查通过。
2026-11-03 14:23:59 +08:00

21 lines
705 B
TypeScript

/** Serialize local saves so each request reads the revision returned by the last. */
export function createCanvasSaveQueue() {
let pending: Promise<unknown> = Promise.resolve();
const queue = {
enqueue<T>(save: () => Promise<T>): Promise<T> {
const next = pending.then(save, save);
pending = next.catch(() => undefined);
return next;
},
enqueueOperation(save: () => Promise<boolean>, operation: () => Promise<void>) {
return queue.enqueue(async () => {
if (!(await save())) {
throw new Error("画布尚未保存成功,请确认网络或画布同步状态后重试");
}
await operation();
});
},
};
return queue;
}