onCommit改成异步

This commit is contained in:
Xu Chang 2023-12-05 17:40:45 +08:00
parent d586cdea03
commit 868dbd7bca
5 changed files with 47 additions and 14 deletions

3
es/store.d.ts vendored
View File

@ -101,8 +101,9 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
}; };
beginSync(): string; beginSync(): string;
private commitCallbacks; private commitCallbacks;
onCommit(callback: (result: OperationResult<ED>) => void): () => ((result: OperationResult<ED>) => void)[]; onCommit(callback: (result: OperationResult<ED>) => Promise<void>): () => ((result: OperationResult<ED>) => Promise<void>)[];
private addToOperationResult; private addToOperationResult;
private commitLogic;
commitSync(uuid: string): void; commitSync(uuid: string): void;
rollbackSync(uuid: string): void; rollbackSync(uuid: string): void;
beginAsync(): Promise<string>; beginAsync(): Promise<string>;

View File

@ -1727,7 +1727,7 @@ export default class TreeStore extends CascadeStore {
}); });
} }
} }
commitSync(uuid) { commitLogic(uuid) {
assert(this.activeTxnDict.hasOwnProperty(uuid), uuid); assert(this.activeTxnDict.hasOwnProperty(uuid), uuid);
let node = this.activeTxnDict[uuid].nodeHeader; let node = this.activeTxnDict[uuid].nodeHeader;
const result = {}; const result = {};
@ -1774,6 +1774,11 @@ export default class TreeStore extends CascadeStore {
waiter.fn(); waiter.fn();
} }
unset(this.activeTxnDict, uuid); unset(this.activeTxnDict, uuid);
return result;
}
commitSync(uuid) {
const result = this.commitLogic(uuid);
// 这里无法等待callback完成callback最好自身保证顺序前端cache应当具备的特征
this.commitCallbacks.forEach(callback => callback(result)); this.commitCallbacks.forEach(callback => callback(result));
} }
rollbackSync(uuid) { rollbackSync(uuid) {
@ -1812,7 +1817,10 @@ export default class TreeStore extends CascadeStore {
return this.beginSync(); return this.beginSync();
} }
async commitAsync(uuid) { async commitAsync(uuid) {
return this.commitSync(uuid); const result = this.commitLogic(uuid);
for (const fn of this.commitCallbacks) {
await fn(result);
}
} }
async rollbackAsync(uuid) { async rollbackAsync(uuid) {
return this.rollbackSync(uuid); return this.rollbackSync(uuid);
@ -1928,6 +1936,9 @@ export default class TreeStore extends CascadeStore {
} }
} }
} }
this.commitCallbacks.forEach(callback => callback(result)); // 在txn提交时应该call过了这里看上去是多余的
/* this.commitCallbacks.forEach(
callback => callback(result)
); */
} }
} }

3
lib/store.d.ts vendored
View File

@ -101,8 +101,9 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
}; };
beginSync(): string; beginSync(): string;
private commitCallbacks; private commitCallbacks;
onCommit(callback: (result: OperationResult<ED>) => void): () => ((result: OperationResult<ED>) => void)[]; onCommit(callback: (result: OperationResult<ED>) => Promise<void>): () => ((result: OperationResult<ED>) => Promise<void>)[];
private addToOperationResult; private addToOperationResult;
private commitLogic;
commitSync(uuid: string): void; commitSync(uuid: string): void;
rollbackSync(uuid: string): void; rollbackSync(uuid: string): void;
beginAsync(): Promise<string>; beginAsync(): Promise<string>;

View File

@ -1729,7 +1729,7 @@ class TreeStore extends CascadeStore_1.CascadeStore {
}); });
} }
} }
commitSync(uuid) { commitLogic(uuid) {
(0, assert_1.assert)(this.activeTxnDict.hasOwnProperty(uuid), uuid); (0, assert_1.assert)(this.activeTxnDict.hasOwnProperty(uuid), uuid);
let node = this.activeTxnDict[uuid].nodeHeader; let node = this.activeTxnDict[uuid].nodeHeader;
const result = {}; const result = {};
@ -1776,6 +1776,11 @@ class TreeStore extends CascadeStore_1.CascadeStore {
waiter.fn(); waiter.fn();
} }
(0, lodash_1.unset)(this.activeTxnDict, uuid); (0, lodash_1.unset)(this.activeTxnDict, uuid);
return result;
}
commitSync(uuid) {
const result = this.commitLogic(uuid);
// 这里无法等待callback完成callback最好自身保证顺序前端cache应当具备的特征
this.commitCallbacks.forEach(callback => callback(result)); this.commitCallbacks.forEach(callback => callback(result));
} }
rollbackSync(uuid) { rollbackSync(uuid) {
@ -1814,7 +1819,10 @@ class TreeStore extends CascadeStore_1.CascadeStore {
return this.beginSync(); return this.beginSync();
} }
async commitAsync(uuid) { async commitAsync(uuid) {
return this.commitSync(uuid); const result = this.commitLogic(uuid);
for (const fn of this.commitCallbacks) {
await fn(result);
}
} }
async rollbackAsync(uuid) { async rollbackAsync(uuid) {
return this.rollbackSync(uuid); return this.rollbackSync(uuid);
@ -1930,7 +1938,10 @@ class TreeStore extends CascadeStore_1.CascadeStore {
} }
} }
} }
this.commitCallbacks.forEach(callback => callback(result)); // 在txn提交时应该call过了这里看上去是多余的
/* this.commitCallbacks.forEach(
callback => callback(result)
); */
} }
} }
exports.default = TreeStore; exports.default = TreeStore;

View File

@ -2046,9 +2046,9 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
return uuid; return uuid;
} }
private commitCallbacks: Array<(result: OperationResult<ED>) => void> = []; private commitCallbacks: Array<(result: OperationResult<ED>) => Promise<void>> = [];
onCommit(callback: (result: OperationResult<ED>) => void) { onCommit(callback: (result: OperationResult<ED>) => Promise<void>) {
this.commitCallbacks.push(callback); this.commitCallbacks.push(callback);
return () => pull(this.commitCallbacks, callback); return () => pull(this.commitCallbacks, callback);
} }
@ -2073,7 +2073,7 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
} }
} }
commitSync(uuid: string) { private commitLogic(uuid: string) {
assert(this.activeTxnDict.hasOwnProperty(uuid), uuid); assert(this.activeTxnDict.hasOwnProperty(uuid), uuid);
let node = this.activeTxnDict[uuid].nodeHeader; let node = this.activeTxnDict[uuid].nodeHeader;
@ -2123,7 +2123,12 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
} }
unset(this.activeTxnDict, uuid); unset(this.activeTxnDict, uuid);
return result;
}
commitSync(uuid: string) {
const result = this.commitLogic(uuid);
// 这里无法等待callback完成callback最好自身保证顺序前端cache应当具备的特征
this.commitCallbacks.forEach( this.commitCallbacks.forEach(
callback => callback(result) callback => callback(result)
); );
@ -2167,7 +2172,10 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
} }
async commitAsync(uuid: string) { async commitAsync(uuid: string) {
return this.commitSync(uuid); const result = this.commitLogic(uuid);
for (const fn of this.commitCallbacks) {
await fn(result);
}
} }
async rollbackAsync(uuid: string) { async rollbackAsync(uuid: string) {
@ -2287,8 +2295,9 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
} }
} }
this.commitCallbacks.forEach( // 在txn提交时应该call过了这里看上去是多余的
/* this.commitCallbacks.forEach(
callback => callback(result) callback => callback(result)
); ); */
} }
} }