Я использую typeORM для объявления моделей данных.
Это выглядит примерно так:
@ObjectType()
@Entity("ParentObject")
@Index(['id'], { unique: true })
export class ParentObject {
@Field({nullable: true})
@PrimaryGeneratedColumn("uuid")
uuid: string;
@Field(type => [NestedObject], {nullable: true})
@OneToMany(type => NestedObject, nestedObject=> nestedObject.parentObject)
nestedObjects: Promise<NestedObject[]>;
@Column({
nullable: true,
type: 'timestamp'
})
@Field(() => GraphQLISODateTime, {nullable: true})
@CreateDateColumn()
createdDate: Date;
}
Массив NestedObject содержит объекты, которые вытягиваются вместе с ParentObject. Они являются Обещанием, потому что TypeORM выполняет асинхронный вызов, чтобы также извлечь их из другой таблицы базы данных, на которую ссылается идентификатор.
Когда я выполняю вызов GraphQL на сервер, он возвращает ParentObject's как массив, и я Я могу перебирать каждый из них с кодом, подобным следующему:
let data = await this.service.getParentObject(first, offset);
data = data.map((parentObject: ParentObject) => {
return ParentObject.someFunction(parentObject);
});
return data;
Я могу изменить значения и т. д. c.
Но моя проблема заключается в возможности перебирать nestedObject в пределах ParentObject. Учитывая, что они объявлены как Promise<NestedObject[]>
, это не стандартный массив и не содержит таких функций, как map или pu sh.
Так что я бы использовал такой код:
let data = await this.service.getParentObject(first, offset);
data = data.map((parentObject: ParentObject) => {
let nestedObjects = parentObject.nestedObjects;
nestedObjects.map(nestedObject=> {
// some operations
})
return ParentObject.someFunction(parentObject);
});
return data;
Я получаю ошибку Typescript:
Property 'map' does not exist on type 'Promise<NestedObject[]>'
, из-за которой я не могу перебирать этот вложенный массив объектов, так как это не простой массив, а скорее обещание вложенного массива объектов. Я не уверен, как решить эту проблему.
Любая помощь будет принята с благодарностью, спасибо.