在我当前的角度项目中,我有一个返回Observable的服务。我想将该流转换为单个产品的可观察到的数组。我想使用管道操作来实现这一点,而不订阅原始流。
从可观测的到实体的可观测的数组
发布于 2020-06-27 10:22:44
当您在可观测对象上使用pipe时,您总是会得到一个新的可观测的,而不是一个数组。您可以访问Product[]并将其映射到(Observable<Product>)[],而不会出现任何问题,但结果仍将被包装在另一个可观察到的地方:
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
interface Product {
id: number;
}
const products: Observable<Product[]> = of([
{ id: 1 },
{ id: 2 },
{ id: 3 },
]);
products
.pipe(map(ps => ps.map((p) => of(p))))
.subscribe((observables: Observable<Product>[]) => {
// In here you can access the array of observables:
console.log(observables);
})与订阅可观测结果不同,您还可以在tap中pipe中访问map()的结果,但结果仍然只能在可观察的上下文中访问:
// ...
import { map, tap } from 'rxjs/operators';
// ...
const x = products
.pipe(
map(ps => ps.map((p) => of(p))),
tap((observables: Observable<Product>[]) => {
// In here you can also access the array of observables:
console.log(observables);
}),
);但是x仍然是一个可以观察到的:
const x: Observable<Observable<Product>[]>或者等量的,但可能稍微更容易理解:
const x: Observable<Array<Observable<Product>>>https://stackoverflow.com/questions/62607760
复制相似问题