【问题标题】:How to get the observable value inside a .map() function如何在 .map() 函数中获取可观察值
【发布时间】:2022-11-29 14:51:41
【问题描述】:

我有一个用数据填充现有数组的函数。我有一个可观察的getOwnerForProperty返回所有者的值。我怎样才能从内部调用它。地图()函数来获取可观察值并将其附加到新对象,如下所示?在我看来,订阅不是一个好主意getOwnerForProperty在功能。地图().请建议以下最佳做法的最佳方法。

//Get single owner observable
public getOwnerForProperty(prop: any){
    return this._manageOwnerService._getOwnersOfProperty(prop).pipe(map(o => o[0]))



/**
 * 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.getOneSyndicForProperty(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;
}
}

【问题讨论】:

  • getOwnerForProperty 是否采用 ID 并基于该 ID 进行 API 调用以获取数据? populateData 是否返回一个数组,您是否需要为每个数组获取数据?
  • 嗨@VimalPatel 感谢您的回复,getOwnerForProperty 函数需要一个属性对象。我正在使用商店。是的,populateData 返回新数组。对于每个属性,我想使用 getOwnerForProperty observable 并获取值并将其分配给新的属性对象,如常量对象.我的问题是如何正确获取可观察值

标签: javascript angular typescript rxjs


【解决方案1】:

你的问题并不完全清楚你到底想达到什么目的,但这是我的解决方案,所以你会希望得到这个想法:

  1. 过滤您想要“丰富”的属性。
  2. 使用forkJoin 创建一个可观察对象数组并等待它们全部完成。
  3. 将每个属性映射到您要等待的可观察对象。
  4. 将 observable 的结果映射到初始属性并使用 owner 对象丰富它。
  5. forkJoin 返回一个 observable,它基本上会发出一个丰富的对象数组并完成。如果你想await这个,你可以把它包装在lastValueFrom运算符中,比如await lastValueFrom(forkJoin(...))
    function _populateData(props: Property[]) {
      const propertiesToPopulate = props.filter((prop) => !prop.isArchived);
    
      forkJoin(
        propertiesToPopulate.map((p: Property) => {
          return getOwnerForProperty(p).pipe(
            map((owner) => ({
              ...p,
              owner,
            }))
          );
        })
      );
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多