1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-01 16:46:54 +03:00
Files
node-redis/examples/transaction-with-watch.js
Sandeep Parmar 64e982d2bf 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.
2022-10-19 17:50:57 +01:00

41 lines
1.1 KiB
JavaScript

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();