blob: c21e224f9cc364f187ac95b33775d5f88335ff97 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import { createClient } from "redis";
export const db = createClient({ url: "redis://db" });
db.on("error", err => console.log("db error", err));
await db.connect();
export default db;
export let g = async k => JSON.parse(await db.get(k));
export let s = (k, v) => db.set(k, JSON.stringify(v));
let retries = {};
export let t = async (k, f) => {
retries[k] = retries[k] ? retries[k]++ : 0;
await db.watch(k);
let o = f(await g(k));
let m = await db.multi();
await s(k, o);
if (retries[k] < 10) {
if (!(await m.exec())) setTimeout(() => t(k, f), 100);
} else throw new Error("could not obtain lock");
};
|