diff --git a/lib/Synchronizer.js b/lib/Synchronizer.js index 9f5e8bf..0766880 100644 --- a/lib/Synchronizer.js +++ b/lib/Synchronizer.js @@ -50,17 +50,27 @@ class Synchronizer { } catch (err) { if (onFailed) { - await onFailed({ - remoteEntity: entity, - remoteEntityId: entityId, - data: queue.map((ele) => ({ - entity: ele.oper.targetEntity, - rowIds: ele.oper.filter.id.$in, - action: ele.oper.action, - data: ele.oper.data, - })), - reason: err, - }, context); + context.on('rollback', async () => { + const context2 = this.contextBuilder(); + context2.begin(); + try { + await onFailed({ + remoteEntity: entity, + remoteEntityId: entityId, + data: queue.map((ele) => ({ + entity: ele.oper.targetEntity, + rowIds: ele.oper.filter.id.$in, + action: ele.oper.action, + data: ele.oper.data, + })), + reason: err, + }, context2); + context2.commit(); + } + catch (err) { + context2.rollback(); + } + }); } throw err; } diff --git a/src/Synchronizer.ts b/src/Synchronizer.ts index fe88c07..c839540 100644 --- a/src/Synchronizer.ts +++ b/src/Synchronizer.ts @@ -92,19 +92,29 @@ export default class Synchronizer ({ - entity: ele.oper.targetEntity!, - rowIds: (ele.oper.filter as any).id.$in, // 暂时应该没什么用 - action: ele.oper.action!, - data: ele.oper.data!, - }) - ), - reason: err, - }, context); + context.on('rollback', async () => { + const context2 = this.contextBuilder(); + context2.begin(); + try { + await onFailed({ + remoteEntity: entity!, + remoteEntityId: entityId!, + data: queue.map( + (ele) => ({ + entity: ele.oper.targetEntity!, + rowIds: (ele.oper.filter as any).id.$in, // 暂时应该没什么用 + action: ele.oper.action!, + data: ele.oper.data!, + }) + ), + reason: err, + }, context2); + context2.commit(); + } + catch (err) { + context2.rollback(); + } + }); } throw err; }