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

AWS Lambda中Sequelize原始查询正常但findAll不触发then回调问题

AWS Lambda中Sequelize的findAll方法无法进入then回调问题

问题现象

在AWS Lambda Node.js运行环境下使用Sequelize操作数据库:

  • 调用sequelize.query执行原始SQL时功能完全正常
  • 调用Sequelize模型提供的findAll方法查询时,代码始终无法进入.then回调分支,无法定位故障原因

异常的findAll实现代码

models.lb2b
.findAll({
  order: [["id", "DESC"]],
  attributes: [
    "id",
    "version",
  ],
})
.then((lb2b) => {
  return  {
    statusCode : 200, 
    body : JSON.stringify(
      {
        message : lb2b 
      }
    )
  }
});

return response
};

正常运行的原始查询实现代码

const lb2b = await sequelize.query("SELECT * FROM lb2b", 
{
  type : QueryTypes.SELECT
}
); 
return {
  statusCode : 200, 
  body : JSON.stringify(
    {
      message : lb2b 
    }
  )
}

故障原因

核心问题是异步逻辑没有被Lambda正确等待:

  1. 正常运行的原始查询使用了await关键字,会阻塞等待数据库查询返回结果后,才会执行后续的return逻辑,Lambda能拿到正确的响应内容
  2. 异常的findAll写法里,只发起了异步查询,没有等待Promise状态变更就直接执行了后续的return response,Lambda拿到返回值后会立刻冻结当前执行环境,挂起的异步回调根本没有机会执行,自然进不到.then分支。另外代码里.then内部return的响应对象没有被任何变量接收,外部return的response变量在给出的代码片段中甚至没有定义,本身就存在逻辑错误。

修复方案

二选一即可:

  • 方案1:和原始查询保持一致,使用async/await语法等待findAll执行完成后再返回结果
const lb2b = await models.lb2b.findAll({
  order: [["id", "DESC"]],
  attributes: ["id", "version"],
});
return {
  statusCode: 200,
  body: JSON.stringify({ message: lb2b })
};
  • 方案2:直接将整个Promise链式调用返回给Lambda,Lambda会自动等待Promise resolve后取最终结果作为返回值,不要在Promise链外部提前return
return models.lb2b
  .findAll({
    order: [["id", "DESC"]],
    attributes: ["id", "version"],
  })
  .then((lb2b) => {
    return {
      statusCode: 200,
      body: JSON.stringify({ message: lb2b })
    };
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:42:17