为何Try-Catch无法捕获PrismaClientInitializationError?
为什么Try-Catch无法捕获PrismaClientInitializationError?
我想了解为何Try-Catch无法捕获PrismaClientInitializationError:即便相关函数处于Try-Catch代码块内,该错误仍未被捕获。我希望知晓错误未被捕获的原因,而非解决该错误的方法。
我的代码
try { await prisma.user.createMany({ data : Array.from({length : numberOfUsers}, () => ({ fullName : faker.internet.userName(), email : faker.internet.email().trim().toLowerCase(), password : faker.internet.password().substring(0, 4).toLowerCase().trim(), phone : faker.phone.number(), verified : true, })) }); } catch(error){ console.log("Error", "Wiiiiii"); }
输出结果
PrismaClientInitializationError: Invalid `prisma.user.createMany()` invocation in /mnt/c/Users/khalid/Desktop/bringoria-hunt/backend/prisma/seed.ts:33:20 30 31 32 async function createUsers(numberOfUsers : number){ → 33 await prisma.user.createMany( error: Environment variable not found: DATABASE_URL. --> schema.prisma:11 | 10 | provider = "mongodb" 11 | url = env("DATABASE_URL") |
未被捕获的原因
核心原因是PrismaClient的初始化逻辑是同步执行的,且发生在你写的Try-Catch代码块的捕获范围之外:
- PrismaClient采用懒加载机制,只有当你第一次调用它的方法(比如这里的
createMany)时,才会触发客户端的初始化流程 - 初始化过程中抛出的
PrismaClientInitializationError是同步错误,不是异步Promise的reject - 你的Try-Catch仅能捕获
await后面Promise的reject,无法捕获这种在Promise创建之前就同步抛出的错误
内容的提问来源于stack exchange,提问作者benlyazid
相关产品推荐
相关产品推荐

