【发布时间】:2019-04-05 08:09:37
【问题描述】:
根据switchMap的定义
在每次发射时,前一个内部可观察对象( 您提供的函数)被取消,新的 observable 是 订阅。您可以通过短语 switch to a new 来记住这一点 可观察到的。
现在,我有这样的代码
const source = timer(0, 5000).pipe(map(x=>`${x}`));
const example = source.pipe(switchMap((f) => interval(1000).pipe(map(y=>`f${f}-s${y}`))),take(20));
const subscribe = example.subscribe(val => console.log(val+' '+ new Date().getSeconds()));
结果是这样的
我的问题是,
第 25 秒 - 外部函数被调用,内部函数尚未触发,所以外部函数的最新值为 0,内部函数也默认为 0,因为它还没有值 f0-s0 25
第 26 秒 - 调用内部函数,理想情况下该值应为 0,因为该函数只是第一次调用,但它是 1,即。 f0-s1 26
第 30 秒 - 调用外部函数,将内部函数值重置为 0,即。 f1-s0 30
为什么内部函数在第 35 秒重置,还剩 1 秒
我觉得这个概念很难理解,谢谢
【问题讨论】:
-
除了@martin 的回答解释了
34s和39s的差距之外,我认为,您还错误地假设您的源在25th 秒开始发射,而它开始在24s。没有“默认 0”,它是从24s开始的源,并且间隔首先在25s发射。
标签: javascript rxjs reactive-programming rxjs6 switchmap