Rxjs 延迟无限流的每个值

Rxjs 延迟无限流的每个值,rxjs,observable,rxjs6,Rxjs,Observable,Rxjs6,正如标题所示,我希望将iterable中的每个值延迟一段时间,同时保持对iterable的惰性评估。这是到目前为止我所得到的最接近的一个,它适用于有限可数或那些不抛出错误的可数 function* iter () { let i = 0 while (true) yield i++ } rxjs.zip( rxjs.from(iter()), rxjs.timer(500, 500), x => x ).subscribe(console.log) 另一种方法可能是

正如标题所示,我希望将iterable中的每个值延迟一段时间,同时保持对iterable的惰性评估。这是到目前为止我所得到的最接近的一个,它适用于有限可数或那些不抛出错误的可数

function* iter () {
  let i = 0
  while (true) yield i++
}

rxjs.zip(
  rxjs.from(iter()),
  rxjs.timer(500, 500),
  x => x
).subscribe(console.log)
另一种方法可能是:

const source$ = interval(0);
source$.pipe(
    concatMap(x => 
        of(x).pipe(delay(500))
    )
).subscribe(console.log);

这里的答案提供了一个例子:这个例子的标题是
implement.delay with.mergeMap
source$
设置为无限生成器
$source=from((function*(){let i=0;while(true)yield i++})()
,使用无限循环似乎不是一个明智的想法,这不会导致最大调用堆栈错误吗?我不确定生成器是否能够阻止这种情况的发生,我正试图在stackblitz中测试这种行为,但它会杀死输出面板中的浏览器生成器的整个思想是,它们被惰性地评估,因此不会得到无限循环,调用堆栈在这里不相关。无限生成器有其用途,请参见:haskells ranges或此: