【发布时间】:2016-11-12 23:23:05
【问题描述】:
要求:调用远程服务器上的 observable 以获取产品 ID 列表。调用 Firebase 以获取产品详细信息(针对每个产品 ID)。
以下代码有效,但感觉更像是一个承诺实现,而不是一个可观察的实现。请注意,代码示例是简化的,有点伪代码。
理论上,这可以通过调用一个返回所有产品的 Firebase observable 来解决,例如其中 productid 在 (35, 68) 中。但我找不到在 Firebase 中执行此操作的方法。相反,我对每个产品 ID 进行一次调用。
this.predicitionioService.getProductIds()
.subscribe(
ids => {
this.productService.getProduct(ids[0].id).subscribe(product => this.product1 = product);
this.productService.getProduct(ids[1].id).subscribe(product => this.product2 = product);
}
);
flatMap 是这里所需要的。但返回的数据仅适用于最后一个产品。
this.predicitionioService.getProductIds()
.flatMap((ids) => this.productService.getProduct(ids[0].id))
.flatMap((ids) => this.productService.getProduct(ids[1].id))
.subscribe(
merge 有点让我到达那里,但也会在 subscribe next 函数中返回产品 ID。我需要产品有一个索引,例如产品 1、2、3。我不能只绑定一个列表。这似乎适用于分配我自己的索引,例如我++。但这又变得一团糟。
this.predicitionioService.getProductIds()
.merge(
this.productService.getProduct(ids[1].id),
this.productService.getProduct(ids[2].id)
)
.subscribe(
有没有更好的方法用可观察的方法来实现这个?
【问题讨论】:
-
只是为了澄清,您想获得一个 ID 列表以及您想要产品的每个 ID?结果应该是一个关联数组?
标签: angular observable