首页 > 解决方案 > 覆盖 BehaviorSubject 中的值会创建越来越大的条目

问题描述

BehaviorSubject用来存储一些数据并在将来获取它。这是一些示例代码来重现我遇到的奇怪问题:

var subject = new BehaviorSubject<any>(undefined);

subject.next(1); // Store the value 1 into 'subject'
subject.asObservable().subscribe((data) => { console.log(data); }); 
// Output: 1

subject.next(2); // Store the value 2 into 'subject'
subject.asObservable().subscribe((data) => { console.log(data); }); 
// Output 2 \n 2 (logs twice)

subject.next(1); // Store the value 1 into 'subject'
subject.asObservable().subscribe((data) => { console.log(data); }); 
// Output: 1 \n 1 \n 1 (logs three times)

从我在线阅读的内容来看,我希望subject.next()覆盖 Observable 中的值,它正在这样做,但我不希望它返回这些额外的尾随等效值。

编辑:我不知道 subscribe() 类似于 EventListener,只要可观察到的变化就会被调用。这是产生预期输出的代码:

var subject = new BehaviorSubject<any>(undefined);

subject.next(1); // Store the value 1 into 'subject'
subject.asObservable().subscribe((data) => { console.log(data); }); 

subject.next(2); // Store the value 2 into 'subject'
subject.next(1); // Store the value 1 into 'subject'

标签: javascriptangularrxjsobservable

解决方案


推荐阅读