gpt4 book ai didi

Angular2 + 异步管道 : Get multiple values from a single Observale

转载 作者:太空狗 更新时间:2023-10-29 17:52:21 24 4
gpt4 key购买 nike

我有一个服务,它返回一个 Observable。现在我正在寻找正确/最有效的方法来从这个 Observable 中获取多个结果,而无需编写太多代码。

  • MyService返回 Observable<Array<Foo>>

  • MyComponent电话 myService.getFoos()并应输出数组的前 5 个元素、数组的总长度以及未显示的元素数。

这是我当前的代码:

@Injectable()
export class MyService {
foos = new BehaviorSubject<Array<Foo>>([]);

getFoos() {
return this.foos.asObservable();
}
}



@Component({
template: `
Total: {{ totalCount | async }}
Omitted: {{ (totalCount | async) - (maxFiveItems | async).length }}
<div *ngFor="let item of maxFiveItems | async">
{{item.bar}}
</div>
`
})
export class MyComponent {
totalCount: Observable<number>;
maxFiveItems: Observable<Array<Foo>>;

constructor(myService:MyService) {
this.totalCount = myService.getFoos()
.map(arr => arr.length);

this.maxFiveItems = myService.getFoos()
.map(arr => arr.slice(0, 5));
}
}

结果看起来不错,但我使用的是 async管道 4 次。这(据我所知)将导致 4 个订阅。我猜这完全没有必要 (?)


当然我可以在 constructor 中手动订阅的 MyComponent然后在没有async的情况下生活管道。但是我必须自己取消订阅。

还有其他方法可以解决这个问题吗?

最佳答案

假设 myService.getFoos() 内部某处使用 share() 运算符,那么您所做的事情没有任何问题,因此您所有的 async 管道共享对源的相同订阅。如果您像本示例中那样使用 BehaviorSubject,那么就没问题。

你提到的关于在构造函数中订阅自己的内容是我立即想到的。不过,我不认为手动取消订阅是个问题。

关于Angular2 + 异步管道 : Get multiple values from a single Observale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41674113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com