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

Node.js:如何返回UUID同时异步执行SQL长任务?

解决方案

核心思路是不等待SQL执行完成,直接生成UUID并返回,同时让SQL任务在后台异步执行,还要将UUID和SQL任务的状态/结果关联起来,方便后续查询。

1. 调整函数逻辑,异步执行SQL任务

修改getUUID函数,去掉await阻塞,直接启动SQL任务后台运行,同时立即生成并返回UUID:

// 存储UUID对应的任务状态与结果,生产环境建议用Redis或数据库替代内存存储
const taskStore = new Map();

async getUUID() {
  const uuid = uuidv4();
  // 初始化任务状态为执行中
  taskStore.set(uuid, { status: 'running', result: null });
  
  // 不等待SQL执行完成,直接启动异步任务
  executeSql(uuid).catch(err => {
    // 捕获SQL执行错误,更新任务状态
    taskStore.set(uuid, { status: 'failed', error: err.message });
  });
  
  return uuid;
}

async executeSql(uuid) {
  try {
    // 执行SQL查询逻辑
    const sqlResult = /* 实际SQL执行结果 */;
    // SQL执行完成后,更新任务状态与结果
    taskStore.set(uuid, { status: 'completed', result: sqlResult });
  } catch (err) {
    throw err;
  }
}

2. 新增结果查询接口

提供接口让用户通过UUID查询任务状态和最终结果:

async getTaskResult(uuid) {
  const task = taskStore.get(uuid);
  if (!task) {
    return { status: 'not_found' };
  }
  return task;
}

关键注意点

  • 移除await后,getUUID不会再等待SQL执行,能立即返回UUID给用户。
  • 必须维护UUID与任务状态的映射,否则后续无法关联查询结果;生产环境不要用内存存储,避免服务重启丢失数据。
  • 要捕获SQL执行的异常,及时更新任务状态为失败,避免任务一直处于"running"状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:45:33