You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Hono返回提前响应并继续执行后续代码

解决Hono中提前返回响应并后台执行任务的问题

核心思路

Hono的请求处理逻辑要求必须返回响应对象来完成请求周期,无法像Google Cloud函数那样直接发送响应后继续执行后续代码。要实现"提前响应+后台任务",可以借助Bun的异步任务特性,在返回响应后启动不等待完成的后台逻辑。

具体实现代码

import { Hono } from 'hono'
import { StatusCode } from 'hono/utils/http-status'

const app = new Hono()

app.post('/backup', async (c) => {
  // 1. 构建并准备返回202 Accepted响应
  c.status(StatusCode.Accepted)
  const response = c.json({ status: 'accepted', message: '备份任务已在后台启动' })

  // 2. 启动独立异步任务执行备份逻辑(不使用await,直接后台运行)
  ;(async () => {
    try {
      // 替换为实际的备份操作代码
      console.log('开始执行备份')
      // 模拟备份耗时操作
      await new Promise(resolve => setTimeout(resolve, 5000))
      console.log('备份完成')
    } catch (err) {
      // 后台任务错误处理,比如写入日志
      console.error('备份失败:', err)
    }
  })()

  // 3. 返回响应,结束请求周期
  return response
})

export default app

关键注意点

  • 后台任务不能依赖请求上下文(c对象),请求返回响应后上下文会被销毁
  • 必须为后台任务添加错误捕获,避免静默失败
  • 如果需要更高可靠性的任务处理,可以结合Bun内置的Bun.queue功能,确保任务在进程重启后仍能被执行

内容的提问来源于stack exchange,提问作者Greg Forel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:48:12