Concurrency
async: コンテキストを引数で明示して非同期処理へ渡す
リクエスト固有の値を共有状態に置かず、関数引数として渡せば非同期処理の依存が明確になります。
SourceexplicitContext.ts
Node.js 22
export async function handleRequest(requestId: string): Promise<string> {
await Promise.resolve();
return `request:${requestId}`;
}TestexplicitContext.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { handleRequest } from "../../src/async/explicitContext.js";
test("非同期処理は明示的に渡したリクエストIDを返す", async () => {
assert.deepEqual(await Promise.all([handleRequest("a"), handleRequest("b")]), ["request:a", "request:b"]);
});01Assertion
このテストで確認できること
- 非同期関数へリクエスト ID を渡す
- 並列呼び出しの結果を入力ごとに対応付ける
暗黙のスレッドローカルやグローバル状態への依存を避け、必要な文脈を明示的に渡すとテスト可能性が上がります。
OBSERVED RESULT
expected: Promise.all → ["request:a", "request:b"]
actual: ["request:a", "request:b"]