在我想重播值但不希望它与多个观察者共享的地方使用shareReplay是否有意义?

问题描述 投票:1回答:2
我有一种情况,我需要从后端获取状态和优先级的映射,因为它是静态值,所以一旦应用程序加载后,我不想多次从后端获取这些值,因此我需要一种方法可以在不调用后端的情况下再次为我提供值,这是我正在使用的代码段。

ngOnInit() { const status = this.http.get('https://my-json-server.typicode.com/darpankumar/Fakedb/status').pipe( shareReplay(1) ); const priority = this.http.get('https://my-json-server.typicode.com/darpankumar/Fakedb/priority').pipe( shareReplay(1) ); this.statusPriority$ = combineLatest(status,priority) }

以及需要使用的地方,我像这样使用它

btnClick() { this.task$ = this.statusPriority$.pipe(flatMap((data :Array<any>) => { const [status, priority] = [...data]; return this.http.get('https://my-json-server.typicode.com/darpankumar/Fakedb/data').pipe( map((data : any) =>{ // this is the place where i do the mapping. data.status = status[data.statusCode]; data.priority = priority[data.priorityCode]; return data; }) ); })) }

所以我的问题很简单,就是实现这种行为的正确方法,因为困扰我的是shareReplay给出了multicast observable,而我没有在多个地方使用它。

但是除此之外,我找不到任何可以为我实现相同功能的方法。

另外一个问题是,有什么方法可以使此状态和优先级变为可观察的状态,以便它获取加载时的值,而不是单击按钮时的值。

我知道我可以使用behavioursubject(withsomeinitialValue),然后可以进行后端调用并在ts中订阅这些值,并且可以在behavioursubject上进行下一个操作,但我不想在组件中进行订阅。

fiddle

我有一种情况,我需要从后端获取状态和优先级的映射,因为它是静态值,所以一旦应用程序加载,我就不想多次从...获得这些值了...

angular rxjs rxjs6 rxjs-pipeable-operators
2个回答
1
投票
有趣的问题,简短的答案,没关系。我不确定是否可以将statuspriority保持为可观察的状态,而无需使用Subjects也可以通过另一种方式实现相同的行为。

1
投票
另外一个问题是,有什么方法可以使此状态和优先级变为可观察的状态,以便它获取加载时的值,而不是单击按钮时的值。
© www.soinside.com 2019 - 2024. All rights reserved.