Closed2
Vercel Edge FunctionsではwaitUntil()内の処理も30秒でタイムアウトする
![catnose](https://res.cloudinary.com/zenn/image/fetch/s--W-fOqbD1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/76c614a1fa.jpeg)
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!`,
});
}
![catnose](https://res.cloudinary.com/zenn/image/fetch/s--W-fOqbD1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/76c614a1fa.jpeg)
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にクローズされました