You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
Adds transaction with watched key example script. (#2297)
* transction example improved * readme fixed * delay added for watched key changes * pooling error fixed on recursion * Minor comment update. Co-authored-by: Ajay <ajay.markana@yudiz.com> Co-authored-by: Simon Prickett <simon@redis.com> Closes #2280.
This commit is contained in:
40
examples/transaction-with-watch.js
Normal file
40
examples/transaction-with-watch.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import { createClient, WatchError } from 'redis';
|
||||
|
||||
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
const client = createClient();
|
||||
await client.connect();
|
||||
|
||||
function restrictFunctionCalls(fn, maxCalls) {
|
||||
let count = 1;
|
||||
return function (...args) {
|
||||
return count++ < maxCalls ? fn(...args) : false;
|
||||
};
|
||||
}
|
||||
|
||||
const fn = restrictFunctionCalls(transaction, 4);
|
||||
|
||||
async function transaction() {
|
||||
try {
|
||||
await client.executeIsolated(async (isolatedClient) => {
|
||||
await isolatedClient.watch('paymentId:1259');
|
||||
const multi = isolatedClient
|
||||
.multi()
|
||||
.set('paymentId:1259', 'Payment Successfully Completed!')
|
||||
.set('paymentId:1260', 'Refund Processed Successfully!');
|
||||
await delay(5000); // Do some changes to the watched key during this time...
|
||||
await multi.exec();
|
||||
console.log('Transaction completed Successfully!');
|
||||
client.quit();
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof WatchError) {
|
||||
console.log('Transaction Failed Due To Concurrent Modification!');
|
||||
fn();
|
||||
} else {
|
||||
console.log(`Error: ${error}`);
|
||||
client.quit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
transaction();
|
Reference in New Issue
Block a user