首页 > 解决方案 > 多个通知时延迟来自 behaviorSubject 的下一次调用 - Angular,Rxjs

问题描述

在我的 Angular 应用程序中,我将状态 作为BehaviorSubject存储在服务中,当数据来自服务器时,我调用下一个函数来更新数据并通知所有订阅者。

伪代码:

   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 延迟下一次通话的方式是什么?

标签: angularrxjs

解决方案


性能影响将来自订阅该 BehaviorSubject 的组件而不是其本身。

无论如何,您可以使用延迟运算符来延迟下一个呼叫,如下所示:

private sub$ = new BehaviorSubject<any>(null);
public data$ = this.sub$.pipe(delay(500)));

public updateData(newData){
  var currentData = sub$.value;
  sub$.next({...currentData , ...newData})
}

推荐阅读