Skip to content

Commit 0aa1d05

Browse files
committed
Implement simple transaction
1 parent 030efe8 commit 0aa1d05

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed

JavaScript/2-delta.js renamed to JavaScript/2-transaction.js

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,59 +11,49 @@ Transaction.start = (data) => {
1111
console.log('commit transaction');
1212
Object.assign(data, delta);
1313
delta = {};
14-
methods.delta = delta;
1514
},
1615
rollback: () => {
1716
console.log('rollback transaction');
1817
delta = {};
19-
methods.delta = delta;
20-
},
21-
delta
18+
}
2219
};
2320

2421
return new Proxy(data, {
2522
get(target, key) {
26-
console.log('get', key);
27-
if (key === Symbol.iterator) {
28-
const changes = Object.keys(delta);
29-
const keys = Object.keys(target).concat(changes);
30-
const props = keys.filter((x, i, a) => a.indexOf(x) === i);
31-
return props[Symbol.iterator]();
32-
}
33-
return methods[key] || delta[key] || target[key];
23+
if (methods.hasOwnProperty(key)) return methods[key];
24+
if (delta.hasOwnProperty(key)) return delta[key];
25+
return target[key];
3426
},
3527
set(target, key, val) {
3628
console.log('set', key, val);
37-
if (target[key] === val) {
38-
delete delta[key];
39-
} else {
40-
delta[key] = val;
41-
}
29+
if (target[key] === val) delete delta[key];
30+
else delta[key] = val;
4231
return true;
4332
}
4433
});
4534
};
4635

47-
4836
// Usage
4937

5038
const data = { name: 'Marcus Aurelius', city: 'Rome', born: 121 };
5139

5240
const transaction = Transaction.start(data);
41+
console.log(JSON.stringify(data), JSON.stringify(transaction));
42+
console.dir({ data, transaction });
5343

5444
transaction.name = 'Mao Zedong';
5545
transaction.born = 1893;
56-
57-
console.dir(transaction.delta);
46+
console.log('JSON:', JSON.stringify(data), JSON.stringify(transaction));
47+
console.dir({ data, transaction });
5848

5949
transaction.commit();
60-
61-
console.dir(transaction.delta);
50+
console.log('JSON:', JSON.stringify(data), JSON.stringify(transaction));
51+
console.dir({ data, transaction });
6252

6353
transaction.city = 'Shaoshan';
64-
65-
console.dir(transaction.delta);
54+
console.log('JSON:', JSON.stringify(data), JSON.stringify(transaction));
55+
console.dir({ data, transaction });
6656

6757
transaction.rollback();
68-
69-
console.dir(transaction.delta);
58+
console.log('JSON:', JSON.stringify(data), JSON.stringify(transaction));
59+
console.dir({ data, transaction });

0 commit comments

Comments
 (0)