typescript - 为什么我得到“UnhandledPromiseRejectionWarning:错误:未定义类型错误。确保提供显式类型”即使在我指定了类型之后?
问题描述
create 方法运行良好。没有错误。但我需要一种方法来一次插入大量记录。这就是我尝试使用 createQueryBuilder 的原因。
它说未定义类型错误的原因是什么?我已经将类型定义为布尔值。
这是我的解析器
@Resolver(() => Vehicle)
export class VehicleResolver {
constructor(private vehicleService: VehicleService) {}
@Mutation(() => Vehicle, { name: 'createVehicle' })
create(@Args('vehicleInput') vehicle: VehicleCreateDTO) {
return this.vehicleService.create(vehicle);
}
@Mutation(() => Boolean, { name: 'createVehicleBulk' })
async createVehicleBulk(@Args('vehiclesInput') vehicles: [VehicleCreateDTO]) {
const res = await this.vehicleService
.createBulk(vehicles)
.catch((err) => console.log(err));
if (res) return true;
else return false;
}
}
这是我的服务
@Injectable()
export class VehicleService {
constructor(
@InjectRepository(Vehicle) private vehicleRepo: Repository<Vehicle>,
) {}
create(vehicle: VehicleCreateDTO): Promise<Vehicle> {
const vcl = this.vehicleRepo.create(vehicle);
return this.vehicleRepo.save(vcl);
}
async createBulk(vehicles: VehicleCreateDTO[]): Promise<InsertResult> {
const res = await this.vehicleRepo
.createQueryBuilder()
.insert()
.into('vehicle')
.values(vehicles)
.execute();
return res;
}
}
我想保存一个 VehicleCreateDTO 类型的对象数组。但我收到以下错误。
(node:11464) UnhandledPromiseRejectionWarning: Error: Undefined type error. Make sure you are providing an explicit type for the "createBulk" (parameter at index [0]) of the "VehicleResolver" class.
at Object.reflectTypeFromMetadata (E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\dist\utils\reflection.utilts.js:15:15)
at E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\dist\decorators\args.decorator.js:17:78
at E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\dist\schema-builder\storages\lazy-metadata.storage.js:36:44
at Array.forEach (<anonymous>)
at LazyMetadataStorageHost.load (E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\dist\schema-builder\storages\lazy-metadata.storage.js:36:26)
at GraphQLSchemaFactory.<anonymous> (E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:37:57)
at Generator.next (<anonymous>)
at E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\node_modules\tslib\tslib.js:117:75
at new Promise (<anonymous>)
at Object.__awaiter (E:\COL\backend\vehicle-service-insert\node_modules\@nestjs\graphql\node_modules\tslib\tslib.js:113:16)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:11464) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:11464) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
解决方案
您的输入类型参数的符号似乎是错误的。如果我仔细观察,错误消息似乎也具有误导性
...“VehicleResolver”类的“createBulk”(索引 [0] 处的参数)的类型...
但是在您的解析器中,您只有突变createVehicle
和createVehicleBulk
,所以我认为这是createVehicleBulk
错误所在的突变。
只是改变:
@Mutation(() => Boolean, { name: 'createVehicleBulk' })
async createVehicleBulk(@Args('vehiclesInput') vehicles: [VehicleCreateDTO]) {
const res = await this.vehicleService
.createBulk(vehicles)
.catch((err) => console.log(err));
if (res) return true;
else return false;
}
至
@Mutation(() => Boolean, { name: 'createVehicleBulk' })
async createVehicleBulk(@Args({ name: 'vehiclesInput', type: () => [VehicleCreateDTO]}) vehicles: VehicleCreateDTO[]) {
const res = await this.vehicleService
.createBulk(vehicles)
.catch((err) => console.log(err));
if (res) return true;
else return false;
}
我有一个类似的问题,这个答案帮助我找到了解决方案
推荐阅读
- excel - 通过 VBA 在 Excel 中创建可视日历
- c# - Azure Functions 无法获取主机锁租约:Azure.Storage.Blobs
- python - 如何将格式化的打印语句的输出插入到python中的数据框
- c++ - Obj-c(++) 引用指针调用 api
- json - Azure Redis 缓存和 RedisJSON,可能的替代方案
- javascript - 与 Chakra-UI 中的 Radio 结合使用时,选择不起作用
- python - 如何在自动编码器中使用 sparse_categorical_cross_entropy?
- css - 将 CSS 动画淡入到另一个动画中
- c# - 将偶数和奇数分组
- python - 在 Heroku 上处理 Django 的数据库(sqlite)