[英]Iterating over nested array of objects that is defined as a Promise<Object[]>
我正在使用 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 一起拉出的對象。 它們是 Promise,因為 TypeORM 進行了異步調用,以從另一個數據庫表中提取它們,由 ID 引用。
當我對服務器進行 GraphQL 調用時,它以數組形式返回 ParentObject,我可以使用如下代碼迭代每個對象:
let data = await this.service.getParentObject(first, offset);
data = data.map((parentObject: ParentObject) => {
return ParentObject.someFunction(parentObject);
});
return data;
我能夠修改值等。
但我的問題是能夠在 ParentObject 中迭代nestedObject。 鑒於它們被聲明為Promise<NestedObject[]>
,它不是標准的 Array 並且不包含諸如 map 或 push 之類的函數。
所以我會使用這樣的代碼:
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;
我收到打字稿錯誤:
Property 'map' does not exist on type 'Promise<NestedObject[]>'
這讓我無法迭代這個嵌套的對象數組,因為它不是一個簡單的數組,而是一個嵌套對象數組的承諾。 我不知道如何處理這個問題。
任何幫助將不勝感激,謝謝。
只需await
Promise,然后您就可以像平常一樣訪問和操作數組。
data = data.map(async (parentObject: ParentObject) => {
const resolvedPromise = await parentObject.nestedObjects
parentObject.nestedObjects = resolvedPromise.map(nestedObject=> {
// some operations
})
...
});
請注意,因為我們傳遞給data.map
的函數現在是async
, data.map
現在將返回一個data.map
數組。 這很好,因為您可以在解析器中返回它,GraphQL 會適當地處理它。 但是,如果出於某種原因需要在返回data
變量之前對其進行操作,則還需要等待它。 但是,要等待一系列Promise.all
,您可以使用Promise.all
:
data = await Promise.all(data.map(async () => {...}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.