Prisma Client Extensions计算字段返回Promise的解决方案咨询
Prisma Client Extensions异步计算字段问题解决办法
Prisma Client Extensions的compute字段是同步执行的,不支持异步逻辑——直接调用异步函数会返回[object Promise]字符串,把compute设为async则会返回pending状态的Promise,根本原因是计算字段会在模型实例初始化时同步求值,无法等待异步操作完成。
解决办法
推荐用异步实例方法替代计算字段,具体实现如下:
- 扩展User模型,添加异步方法
const prisma = new PrismaClient().$extends({ model: { user: { // 定义异步方法,接收User实例作为参数 async getNameAndAge(user: User) { const asyncData = await getdata(); // 组合字段与异步数据 return `${user.name} (${user.age}) - ${asyncData}`; }, }, }, });
- 使用时直接调用并await方法
// 查询用户 const targetUser = await prisma.user.findUnique({ where: { id: 1 } }); // 获取带异步数据的组合结果 const nameAndAge = await prisma.user.getNameAndAge(targetUser);
替代方案:查询后手动处理
如果不想扩展模型方法,也可以在查询用户后手动组合异步数据:
const targetUser = await prisma.user.findUnique({ where: { id: 1 } }); const asyncData = await getdata(); const userWithCombinedField = { ...targetUser, nameAndAge: `${targetUser.name} (${targetUser.age}) - ${asyncData}` };
内容的提问来源于stack exchange,提问作者user1513388
相关产品推荐
相关产品推荐

