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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy