首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有订阅的情况下将Observable<Product[]>转换为Observable<Product>[]?

如何在没有订阅的情况下将Observable<Product[]>转换为Observable<Product>[]?
EN

Stack Overflow用户
提问于 2020-06-27 08:43:14
回答 1查看 885关注 0票数 1

在我当前的角度项目中,我有一个返回Observable的服务。我想将该流转换为单个产品的可观察到的数组。我想使用管道操作来实现这一点,而不订阅原始流。

从可观测的到实体的可观测的数组

EN

回答 1

Stack Overflow用户

发布于 2020-06-27 10:22:44

当您在可观测对象上使用pipe时,您总是会得到一个新的可观测的,而不是一个数组。您可以访问Product[]并将其映射到(Observable<Product>)[],而不会出现任何问题,但结果仍将被包装在另一个可观察到的地方:

代码语言:javascript
复制
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);
    })

与订阅可观测结果不同,您还可以在tappipe中访问map()的结果,但结果仍然只能在可观察的上下文中访问:

代码语言:javascript
复制
// ...
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仍然是一个可以观察到的:

代码语言:javascript
复制
const x: Observable<Observable<Product>[]>

或者等量的,但可能稍微更容易理解:

代码语言:javascript
复制
const x: Observable<Array<Observable<Product>>>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62607760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档