我试图理解以下代码的控制台输出。我期待它会每 500 毫秒控制台记录 0 到 9,然后再次以 0 重新开始(最终以 9 结束)。
但事实是它第一次只会控制台记录 0-9,然后输出变为 0-8,在 8 处暂停 1 秒,然后再次从 0 开始。
我的问题是
- 为什么9只出现一次?
- 为什么在 8 处有 1 秒(而不是 500 毫秒)的暂停?
由于源 observable 每 5 秒发射一次,而内部 observable 每 500ms 发射一次,它应该有足够的时间让内部 observable 发射 0 到 9,并且它不应该在 8 处暂停。
这是 stackblitz 上的相同代码: https ://stackblitz.com/edit/typescript-eb62ap?file=index.ts&devtoolsheight=100
// RxJS v6+
import { timer, interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';
//emit immediately, then every 5s
const source = timer(0, 5000);
//switch to new inner observable when source emits, emit items that are emitted
const example = source.pipe(switchMap(() => interval(500)));
//output: 0,1,2,3,4,5,6,7,8,9...0,1,2,3,4,5,6,7,8
const subscribe = example.subscribe(val => console.log(val));