gpt4 book ai didi

rxjs - combineLatest 不发出最新值

转载 作者:行者123 更新时间:2023-12-04 17:43:29 26 4
gpt4 key购买 nike

我很难理解为什么 combineLatest没有返回最新值。这个例子有点做作,但至少它说明了我的问题。注意 color 的值来自 combineLatest observable 返回先前的值,当 subject.value是正确的。就像 color$ observable 没有发出。

import { map, distinctUntilChanged, combineLatest } from 'rxjs/operators'
import { Observable } from 'rxjs/observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

const main$ = new BehaviorSubject({color: 'red'});

const color$ = main$.pipe(
map(state => state.color),
)

main$.pipe(
combineLatest(color$)
)
.subscribe(([state, color]) => {
console.log(state, color, main$.value.color);
})

main$.next({
color: 'yellow'
});

实际输出
{color: "red"} "red" "red"

{color: "yellow"} "red" "yellow"

{color: "yellow"} "yellow" "yellow"

预期输出
{color: "red"} "red" "red"

{color: "yellow"} "yellow" "yellow" // Notice middle value is yellow

{color: "yellow"} "yellow" "yellow"

https://stackblitz.com/edit/combine-latest-issue

如果有人可以帮助解释发生了什么,并在 rxjs 中提供解决方法或正确的思考方式我会很感激。

最佳答案

可视化正在发生的事情而不是文字可能会很有用:

main$     R--------------------Y------------------------------

color$ -------R-----------------------Y---------------------

output -----[R,R]---------[Y,R]-----[Y,Y]------------------

如果您使用 zip而不是 combineLatest ,您将非常接近您的期望。如果您使用 zip,请参阅下面的内容:
main$     R--------------------Y------------------------------

color$ -------R-----------------------Y---------------------

output -----[R,R]-------------------[Y,Y]------------------

关于rxjs - combineLatest 不发出最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49910220/

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