gpt4 book ai didi

rxjs - 在 BehaviorSubject 中更新 self 时如何避免无限循环?

转载 作者:行者123 更新时间:2023-12-04 03:07:43 28 4
gpt4 key购买 nike

声明如下:

  public panel$: BehaviorSubject<any> = new BehaviorSubject<any>(false);

像这样使用

  togglepanel() {
this.panel$.subscribe(
(x) => {
if (x) {
this.panel$.next(false);
} else {
this.panel$.next(true);
}
});
}

它创造了一个试图更新 self 的无限循环。

最佳答案

您可以通过仅从 panel$ Observable 获取一个(最新)值来更新它:

this.panel$.take(1).subscribe(...)

但是最好对状态进行一些不同的建模,如下所示:

// const onToggle$ = new Rx.Subject();
var toggle$ = Rx.Observable.fromEvent(document, 'click');

const initialValue = true;
const state$ = toggle$
.scan(state => !state, initialValue)
.startWith(initialValue);

const htmlSubscription = state$.subscribe(state => {
document.getElementById('toggle').innerText = 'toggle: ' + state;
});
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
<button id="toggle">loading...</button>

编辑:

这段代码的角度版本是:

  public toggle$ = new Subject();
public state$ = this.toggle$.scan(state => !state, true)
.startWith(true)
.subscribe((x) => console.log('x:' + x));


togglepanel() {
this.toggle$.next(null);
}

关于rxjs - 在 BehaviorSubject 中更新 self 时如何避免无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606569/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com