【发布时间】:2021-04-10 06:46:52
【问题描述】:
在我的 Angular 应用程序中,当数据到来时,我有一个状态 存储在服务中作为BehaviorSubject > 从服务器我调用 next 函数来更新数据并通知所有订阅者。
伪代码:
ajaxCall_1 -> updateData(response2)
ajaxCall_2 -> updateData(response2)
ajaxCall_3 -> updateData(response3)
...
private data$:Observable<any>;
public updateData(newData){
var currentData = data$.value;
data$.next({...currentData , ...newData})
}
由于很多组件订阅了该 BehaviorSubject,我认为在加载我的应用程序时可能会导致一些性能问题:加载时有很多来自服务器的通知,并且每次调用下一个函数时组件都在渲染。
您认为如果我在 500 毫秒之后将调用延迟到下一个,我会看到性能提升吗? rxjs 延迟下一次调用的方式会是什么?
【问题讨论】:
-
你需要所有的电话吗?好像经常更新。那么你需要在那里存储最终状态吗?然后你可以使用 switchmap
-
是的,我需要所有的电话。 switchmap 对我有什么帮助?
-
No SwitchMap 只保留最新的通话 如果你需要所有通话,需要在那里使用 MergeMap。接听所有电话的目的是什么。实际上不知道您的情况。如果是这样,您可能需要在此处更改结构。也许使用队列来排队状态和出列类似的东西
-
我添加了一些伪代码,现在可能更清楚了吗?
-
使用
unsubscribe可能对你有帮助