使用$get结合预加载时Sequelize-typescript查询无限等待
问题:Sequelize $get方法添加include后Promise无响应
我尝试在Sequelize对象上结合使用$get方法与预加载:
await user?.$get("following", { order: [["name", "ASC"]], limit: USERS_PER_PAGE, offset: (page - 1) * USERS_PER_PAGE, where, include: Gym }
原本查询运行正常,但添加include参数后,Promise既不解析也不抛出错误。用户与Gym模型通过Gym中的外键存在一对一关联,使用findOne和findMany方法时包含Gym是正常的。想确认是操作有误还是Sequelize-typescript存在问题?
解决方案
- 修复语法错误:你的代码末尾缺失了闭合括号
),这会导致代码无法正确执行,甚至出现Promise挂起的情况。修正后代码:
await user?.$get("following", { order: [["name", "ASC"]], limit: USERS_PER_PAGE, offset: (page - 1) * USERS_PER_PAGE, where, include: Gym })
- 确保include关联正确:
$get("following")是获取当前用户关注的用户列表,因此include需要关联到**关注用户(User模型)**对应的Gym关联,而非当前用户的Gym关联。如果User与Gym的关联定义了别名(比如User.hasOne(Gym, { as: 'gymProfile' })),需要在include中指定别名:
include: { model: Gym, as: 'gymProfile' }
- 排查SQL执行问题:启用Sequelize日志功能,查看生成的SQL语句,手动执行验证是否存在查询异常:
// 在Sequelize实例初始化时添加日志配置 const sequelize = new Sequelize({ // 其他数据库配置 logging: console.log });
- 检查Sequelize-Typescript类型定义:确保关联模型的类型定义正确,避免因类型推断问题导致的查询异常。
内容的提问来源于stack exchange,提问作者JaRoMaster
相关产品推荐
相关产品推荐

