Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代定义为承诺的嵌套对象数组<;对象[]>;_Javascript_Typescript_Promise_Graphql_Typeorm - Fatal编程技术网

Javascript 迭代定义为承诺的嵌套对象数组<;对象[]>;

Javascript 迭代定义为承诺的嵌套对象数组<;对象[]>;,javascript,typescript,promise,graphql,typeorm,Javascript,Typescript,Promise,Graphql,Typeorm,我正在使用TypeForm声明数据模型 它看起来像这样: @ObjectType() @Entity("ParentObject") @Index(['id'], { unique: true }) export class ParentObject { @Field({nullable: true}) @PrimaryGeneratedColumn("uuid") uuid: string; @Field(type => [NestedObject], {nullab

我正在使用TypeForm声明数据模型

它看起来像这样:

@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;

    }
let data = await this.service.getParentObject(first, offset);

data = data.map((parentObject: ParentObject) => {
    return ParentObject.someFunction(parentObject);
});

return data;
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;
我能够修改值等

但我的问题是能够在ParentObject中迭代嵌套对象。由于它们被声明为
Promise
,因此它不是标准数组,不包含map或push之类的函数

所以我会使用这样的代码:

@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;

    }
let data = await this.service.getParentObject(first, offset);

data = data.map((parentObject: ParentObject) => {
    return ParentObject.someFunction(parentObject);
});

return data;
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[]>'
类型“Promise”上不存在属性“map”
这使得我无法迭代这个嵌套的对象数组,因为它不是一个简单的数组,而是一个嵌套的对象数组。我不知道如何处理这个问题


非常感谢您提供的任何帮助。

请等待承诺,然后您可以像平常一样访问和操作阵列

data = data.map(async (parentObject: ParentObject) => {
    const resolvedPromise = await parentObject.nestedObjects
    parentObject.nestedObjects = resolvedPromise.map(nestedObject=> {
        // some operations
    })
    ...
});
请注意,由于传递给
data.map
的函数现在是
async
data.map
现在将返回一个承诺数组。这是非常好的,因为您可以在解析器中返回它,GraphQL将适当地处理它。但是,如果出于某种原因,您需要在返回变量之前操作
数据
,您也需要等待它。不过,要等待一系列承诺,您可以使用
Promise.all

data = await Promise.all(data.map(async () => {...}))

我对typescript了解不多,但是
Array.from
是一个选项吗?这是将类似数组的结构转换为数组的常用方法,可以访问所有数组方法,如
map
foreach