新导入或新生成的图片在自动保存前点击去水印,会因服务端缺少节点而失败。工具栏统一先保存当前画布,保存成功后再调用处理能力;处理与自动保存共用队列,结果合并保留等待期间的本地编辑并更新保存版本。适用于去水印、抠图、增强、扩图和图层拆分。 验证:14 项画布能力与提交同步测试通过,覆盖保存失败不提交、执行期间编辑保留、上游失败和切换画布;TypeScript 检查通过。
21 lines
705 B
TypeScript
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;
|
|
}
|