kuboon
kuboon18h ago

Can I use deno KV in worker?

It looks work, but does not persist at all. See my sample code below. Q1. why "key1" is not listed in my worker? Q2. why "key2" always 1?
deno -v
deno 2.4.4
deno run --allow-read=. kvTest.ts
I am NOT in a web worker { key: [ "key1" ], value: 8, versionstamp: "00000000000000e00000" } I am in a web worker { key: [ "key2" ], value: 1, versionstamp: "00000000000000090000" }
kvTest.ts
const kv = await Deno.openKv();
if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
console.log('I am in a web worker');
await increment("key2")
await listAll();
} else {
console.log('I am NOT in a web worker');
await increment("key1")
await listAll();
new Worker(import.meta.url, { type: "module" });
}

async function increment(key: string) {
const current = await kv.get([key]);
await kv.atomic().check(current).set([key], (current.value as number ?? 0) + 1).commit();
}
async function listAll(){
for await (const entry of kv.list({ prefix: [] })) {
console.log(entry);
}
}
kvTest.ts
const kv = await Deno.openKv();
if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
console.log('I am in a web worker');
await increment("key2")
await listAll();
} else {
console.log('I am NOT in a web worker');
await increment("key1")
await listAll();
new Worker(import.meta.url, { type: "module" });
}

async function increment(key: string) {
const current = await kv.get([key]);
await kv.atomic().check(current).set([key], (current.value as number ?? 0) + 1).commit();
}
async function listAll(){
for await (const entry of kv.list({ prefix: [] })) {
console.log(entry);
}
}
0 Replies
No replies yetBe the first to reply to this messageJoin

Did you find this page helpful?