我很难理解为什么combineLatest不返回最新值。这个例子有些人为,但至少说明了我的问题。请注意,当观察值正确时,color来自combineLatestobservable 的值将返回先前的值subject.value。就像color$没有发出可观察到的。
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'
});
Run Code Online (Sandbox Code Playgroud)
实际产量
{color: "red"} "red" "red"
{color: "yellow"} "red" "yellow"
{color: "yellow"} "yellow" "yellow"
Run Code Online (Sandbox Code Playgroud)
预期产量
{color: "red"} "red" "red"
{color: "yellow"} "yellow" "yellow" // Notice middle value is yellow
{color: "yellow"} "yellow" "yellow"
Run Code Online (Sandbox Code Playgroud)
https://stackblitz.com/edit/combine-latest-issue
如果有人可以帮助解释发生的事情,并提供解决方法或适当的方式对此进行思考,rxjs我将不胜感激。
可视化正在发生的事情而不是文字可能会有用:
main$ R--------------------Y------------------------------
color$ -------R-----------------------Y---------------------
output -----[R,R]---------[Y,R]-----[Y,Y]------------------
Run Code Online (Sandbox Code Playgroud)
如果您使用zip而不是combineLatest,则将非常接近您的期望。看下面,如果使用,会发生什么zip:
main$ R--------------------Y------------------------------
color$ -------R-----------------------Y---------------------
output -----[R,R]-------------------[Y,Y]------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |