【发布时间】:2018-09-29 07:35:30
【问题描述】:
我很难理解为什么combineLatest 没有返回最新值。这个例子有点做作,但至少它说明了我的问题。注意combineLatest observable 中的color 的值在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 中提供解决方法或正确的方法来思考这个问题,我将不胜感激。
【问题讨论】: