deno.land / std@0.177.1 / node / async_hooks_test.ts

async_hooks_test.ts
نووسراو ببینە
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.import { AsyncLocalStorage, AsyncResource } from "./async_hooks.ts";import { assert, assertEquals } from "../testing/asserts.ts";
Deno.test(async function foo() { const asyncLocalStorage = new AsyncLocalStorage();
const out: string[] = []; function logWithId(msg: string) { const id = asyncLocalStorage.getStore(); out.push(`${id !== undefined ? id : "-"}: ${msg}`); }
async function exec() { logWithId("start"); await new Promise((resolve) => setTimeout(resolve, 100)); logWithId("finish"); }
for (const foo of [1, 2, 3]) { asyncLocalStorage.run(foo, exec); }
await new Promise((resolve) => setTimeout(resolve, 500));
assertEquals(out, [ "1: start", "2: start", "3: start", "1: finish", "2: finish", "3: finish", ]);});
Deno.test(async function bar() { let differentScopeDone = false; const als = new AsyncLocalStorage(); const ac = new AbortController(); const server = Deno.serve(() => { const differentScope = als.run(123, () => AsyncResource.bind(() => { differentScopeDone = true; })); return als.run("Hello World", async () => { // differentScope is attached to a different async context, so // it will see a different value for als.getStore() (123) setTimeout(differentScope, 5); // Some simulated async delay. await new Promise((res) => setTimeout(res, 10)); return new Response(als.getStore()); // "Hello World" }); }, { signal: ac.signal, port: 4000, });
const res = await fetch("http://localhost:4000"); assertEquals(await res.text(), "Hello World"); ac.abort(); await server; assert(differentScopeDone);});
std

Version Info

Tagged at
11 months ago