我有一个名为getTransactionDetails(id:string)的方法,它返回TransactionDetails对象的一个可观察值

getTransactionDetails(id:string):Observable<TransactionDetails> 

TransactionDetails对象如下所示:

class TranscationDetails{
    id:string;
    accessCode: string;
    veggiesList: Array<Veggie>;
    meatList: Array<Meat>;
}

Veggie对象如下所示:

class Veggie{
    id: string;
    name: string;
}

我有另一个名为getVeggieSummary(veggieId:string)的方法,它返回VeggieSummary的可观察值:

getVeggieSummary(veggiesId:string):Observable<VeggieSummary>

VeggieSummary如下所示

class VeggieSummary{
    id:string;
    name:string;
    color:string;
    kind:string;
}

我想调用getTransactionDetails(1),将veggiesList中的所有Veggies元素转换为VeggieSummary并返回一个VeggieSummaryarray.

这就是我所拥有的

getTransactionDetails(1)
.flatMap(transactionDetails=>
    transactionDetails.veggiesList
       .map(veggie=>getVeggieSummary(veggie.id)))
.subscribe(result=>
    console.log(result)
)

目前,result是一个Observable<VeggieSummary>,而内部可观测的甚至没有得到订阅...

我怎么能用rxjs操作符得到Observable<VeggieSummary[]>

注意:我的应用程序的Angular 版本不支持管道.RxJS版本是v5

推荐答案

你只需要用forkJoin来包装内部的可观测值,这将Observable<VeggieSummary>[]转换为Observable<VeggieSummary[]>

    getTransactionDetails(1)
      .flatMap((transactionDetails) =>
        forkJoin(
          transactionDetails.veggiesList.map((veggie) =>
            getVeggieSummary(veggie.id)
          )
        )
      )
      .subscribe((result) => console.log(result));

Javascript相关问答推荐

如何在JavaScript中在文本内容中添加新行

模块与独立组件

Angular中计算信号和getter的区别

从WooCommerce Checkout Country字段重新排序国家,保持国家同步

如何使用JavaScript将文本插入空div

空的结果抓取网站与Fetch和Cheerio

MathJax可以导入本地HTML文档使用的JS文件吗?

如何解决useState错误—setSelect Image不是函数''

Html文件和客户端存储的相关问题,有没有可能?

如果Arrow函数返回函数,而不是为useEffect返回NULL,则会出现错误

您能在卸载程序(QtInsteller框架)上添加WizardPage吗?

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

如何创建返回不带`new`关键字的实例的类

一个实体一刀VS每个实体多刀S

在ChartJS中使用spanGaps时,是否获取空值的坐标?

TabNavigator和StackNavigator之间的Reaction Native中的导航问题

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

Django模板中未加载JavaScript函数

如何在加载页面时使锚定标记成为焦点

将字符串解释为数字;将其重新编码为另一个基数