コンテンツにスキップ

コンテキスト (ctx)

コンテキストAPIは、WorkerまたはDurable Objectのライフサイクルを管理するためのメソッドを提供します。

コンテキストは以下の場所で公開されています:

waitUntil

ctx.waitUntil()は、Workerのライフタイムを延長し、応答を返すことをブロックせずに作業を実行できるようにし、応答が返された後も続行される可能性があります。これはPromiseを受け入れ、Workersランタイムは、Workerのハンドラーによって応答が返された後でも実行を続けます。

waitUntilは一般的に以下の目的で使用されます:

  • 外部分析プロバイダーにイベントを発火させる。(Workers Analytics Engineを使用する場合は、waitUntilを使用する必要はありません)
  • Cache APIを使用してアイテムをキャッシュに入れる

waitUntil()は複数回呼び出すことができます。Promise.allSettledに似ており、1つのwaitUntil呼び出しに渡されたPromiseが拒否されても、他のwaitUntil()呼び出しに渡されたPromiseは引き続き実行されます。

例えば:

export default {
async fetch(request, env, ctx) {
// 元のリクエストを転送/プロキシ
let res = await fetch(request);
// カスタムヘッダーを追加
res = new Response(res.body, res);
res.headers.set('x-foo', 'bar');
// 応答をキャッシュ
// NOTE: ブロック/待機しません
ctx.waitUntil(caches.default.put(request, res.clone()));
// 完了
return res;
},
};

passThroughOnException

passThroughOnExceptionメソッドは、Workerがフェイルオープンし、Workerが未処理の例外をスローしたときにリクエストをオリジンサーバーに通過させることを可能にします。これは、Workerを既存のサービスの前にレイヤーとして使用する際に役立ち、Worker内で発生する予期しないエラーケースをサービスが処理できるようにします。

export default {
async fetch(request, env, ctx) {
// 未処理/未捕捉の例外時にオリジンにプロキシ
ctx.passThroughOnException();
throw new Error('Oops');
},
};