我有一个函数**_populateData**,它从另一个属性列表创建一个新的属性列表。
有一个可观察的getOwnerForProperty返回所有者的值。
//Get single owner observable
public getOwnerForProperty(prop: any){
return this._manageOwnerService._getOwnersOfProperty(prop).pipe(map(o => o[0]))
如何从**.map()函数中调用可观察对象,以获取可观察对象的值并将其附加到新对象,如下所示?在我看来,在.map()中订阅getOwnerForProperty**函数不是一个好主意。请给出实现以下最佳实践的最佳方法。
/**
* Returns the active properties data.
*
* @param props - The property list.
* @returns An array of properties
*/
private _populateData(props: Property[]) {
return
const populated = props
.filter(prop => !prop.isArchived)
.map((p: Property) => {
// refactoring here
this.getOwnerForProperty(p).pipe(
map((owner: Owner) => {
const obj = {
propertyName: p.info.name.toUpperCase(),
owner: owner.name,
createdOn: p.createdOn ? __FormatDateFromStorage(p.createdOn) : ''
}
return obj;
})
)
}
)
return populated;
}
}
1条答案
按热度按时间wi3ka0sx1#
从你的问题来看,你并不完全清楚你到底想达到什么目的,但我的解决方案是这样的,所以你很有希望得到这个想法:
1.筛选您要“丰富”的属性。
1.使用
forkJoin
创建一个可观测量值数组,并等待所有可观测量值完成。1.将每个属性Map到要等待的可观察对象。
1.将可观察结果Map到初始属性,并使用
owner
对象丰富它。forkJoin
返回一个可观察对象,它基本上会发出一个丰富对象的数组并完成。如果你想将它await
,你可以将它 Package 在lastValueFrom
运算符中,比如await lastValueFrom(forkJoin(...))