【问题标题】:Can you return an array of objects, with each object containing an observable from forkJoin?你能返回一个对象数组,每个对象都包含一个来自 forkJoin 的 observable 吗?
【发布时间】:2021-06-05 08:30:35
【问题描述】:
let fruit = {
  id: 1,
  isGood: false
}

假设我有一个函数调用,它接受一个水果对象的 id 并返回一个可观察的对象,该可观察对象解析为一个布尔值,指示值 isGood 是真还是假。

我想映射一个水果对象数组并调用上述函数,然后使用返回的值在对象上设置 isGood,并在返回的同一对象上设置水果的 id。

在我看来,我应该可以做这样的事情:

forkJoin(
  fruitArray.map(fruit => { 
     return of({ 
       "data": isFruitGood(fruit.id)),
       "id": fruid.id
      })
    })  
   ).subscribe(result => console.log(result))

这里的问题是返回了一个对象数组,但是对象中的数据的可观察集没有解析。

【问题讨论】:

    标签: javascript angular rxjs fork-join rxjs-observables


    【解决方案1】:

    您的问题是您的 forkJoin 正在解开您的 of 可观察对象,而不是“数据”属性中返回的内部可观察对象。

    您需要传递 forkJoin 一个可观察对象数组,为您获取 isFruitGood 值,然后在这些对象返回后,构建您的对象:

    forkJoin(fruitArray.map(
      fruit => isFruitGood(fruit.id)
    )).pipe(
      map(isGoodArray => isGoodArray.map(
        (isGood, i) => ({
          data: isGood,
          id: fruitArray[i].id
        })
      )
    )).subscribe(result => console.log(result))
    

    这是一个示例StackBlitz

    【讨论】:

    • 所以你必须使用数组的索引?没有办法以某种方式附加 id 而不是使用索引?
    • 关于 forkJoin 的一点是,返回的数组将与源的顺序相同,因此索引将始终匹配。你也可以将一个字典类型的对象(key 是 ID,value 是 isFruitGood(id))传递给 forkJoin,然后当从 forkJoin 返回数据时,你可以通过id而不是索引来查找它。我在 StackBlitz 中添加了第二个示例。不确定它是否更好,但只是展示了它的外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2012-05-19
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多