Closed2

Vercel Edge FunctionsではwaitUntil()内の処理も30秒でタイムアウトする

catnosecatnose

VercelのEdge FunctionsではwaitUntil()というAPIが利用できます。これは「レスポンスを返した後もwaitUntil()でラップされた処理は非同期で実行される」というとても便利なものです。

The waitUntil() method can be used to keep the function running after a response has been sent. This is useful when you have an async task that you want to keep running after returning a response.

export default function MyEdgeFunction(
  request: NextRequest,
  context: NextFetchEvent,
) {
  context.waitUntil(getAlbum().then((json) => console.log({ json })));
 
  return NextResponse.json({
    name: `Hello, from ${request.url} I'm an Edge Function!`,
  });
}
catnosecatnose

waitUntil()を使ってもタイムアウトが伸びるわけではない

Vercelのドキュメント(Maximum Initial Response Time)にはEdge Functionsの初回のレスポンスのタイムアウトは30秒と書かれています。

The Edge Function must begin sending a response within 30 seconds.

自分はこの部分だけを見て「レスポンスを30秒以内に返して、非同期処理をwaitUntil()を使えばwaitUntil()内の処理は30秒以上かかってもタイムアウトしない」ものだと盛大に勘違いしていました。実際に試してみると30秒経過するとwaitUntil()内の処理であっても中断されます。

You may continue streaming a response beyond that time.

Streamingレスポンスを返すときのみ、30秒以上の処理が可能なようです。

このスクラップは2023/05/06にクローズされました