【发布时间】:2020-03-13 05:50:53
【问题描述】:
我有一个名为saveToLocalStorage 的BehaviorSubject 变量,在一种方法中,next() 方法被调用了两次。这导致了一个问题,因为这两个中只有一个完成了。另一个被简单地覆盖。调用的subscribed 服务将数据保存到本地存储中,仅此而已。显然,下一次调用之间必须有延迟,所以我决定像这样处理 Observable 内的调用(假设 if 语句返回 true):
Observable.of(1).pipe(
tap(()=> {if(this.currentWebAppMode !== newMode){
this.saveToLocalStorage.next([DataType.STORED_RESULTS, null])};
}),
debounceTime(100))
.subscribe(result => this.saveToLocalStorage.next([DataType.WEB_APP_MODE, newMode]));
这行得通,但感觉真的很hacky。所以我想知道是否有更合适的方法来确保后续next() 对saveToLocalStorage 的调用都能够正确执行。
编辑:感谢 Deborah,我能够通过合并 concatMap 运算符而不是 tab 和 debounceTime 来改进我的解决方案,这是我的新代码:
Observable.of(1).pipe(
concatMap(()=> {if(this.dataStoreService.currentAppMode !== newMode){
this.saveToLocalStorage.next([DataType.STORED_RESULTS, null])};
return of(true)}))
.subscribe(result => this.saveToLocalStorage.next([DataType.WEB_APP_MODE, newMode]));
【问题讨论】:
标签: angular typescript rxjs observable behaviorsubject