Koa 立即发送响应,然后继续执行响应后的代码

问题描述 投票:0回答:1

我正在构建一个必须处理大量传入 Webhooks 的后端,而这些对响应时间的要求非常高。

我的后端在 Koa 中,我只想立即发送 200 响应,然后继续执行代码并执行较长的任务,例如处理(计算、访问数据库等)。

我尝试了多种方法,但是通过调用 next() 和 wait next() ,只有当所有中间件都执行了其部分代码时才会发送响应。

注意:我已经阅读了SO

上的这些答案

立即响应Koa请求,继续中间件链

Koa 发送响应后运行代码

延迟 koa 请求 30 分钟但立即发送 200 标头

我的基本代码如下所示:

const webhookHandler = async (ctx: Context, next: Next): Promise<void> => {
  console.log('Handling webhook event');

  // 1 check request
  const event = ctx.request.body;
  if (!event || !event.type) {
    ctx.status = 400;
    ctx.body = { received: false };
    return;
  }

  // 2 send response immediately
  ctx.status = 200;
  ctx.body = { received: true };
  next();

  // 3 handle event
  switch (event.type) {
    case 'a':
      // long running task here
      break;

    default:
      console.log(`Unhandled event type: ${event.type}`);
      break;
  }
};
koa koa2
1个回答
0
投票

在你的中间件函数结束之前,Koa 不会发送请求。假设您的任务可以异步处理,则该任务可能需要包装在您等待的异步函数中。

如果您的任务完全受 CPU 限制,那么您必须重新考虑在进程中运行该任务

© www.soinside.com 2019 - 2024. All rights reserved.