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