Rxjs中如何延迟序列发射

Rxjs中如何延迟序列发射,rxjs,observable,Rxjs,Observable,我有一个可观察到的: messages: string[] = ['a', 'b', 'c']; const source = from(messages) 您如何延迟它,以便当有人订阅它时,它将延迟n秒以发出项目? 因此: 您只需使用.delay()操作符即可: messages: string[] = ['a', 'b', 'c']; const source = from(messages).pipe( delay(1000)//delay for 1 second )

我有一个可观察到的:

  messages: string[] = ['a', 'b', 'c'];
  const source = from(messages)
您如何延迟它,以便当有人订阅它时,它将延迟n秒以发出项目? 因此:


您只需使用
.delay()
操作符即可:

messages: string[] = ['a', 'b', 'c'];
const source = from(messages).pipe(
    delay(1000)//delay for 1 second
)
记住导入
延迟

import { delay } from 'rxjs/internal/operators';
我不知道这是否是最好的方法,但对我来说很有效。希望这对将来的人有所帮助

作为@Igno Burk的建议:

const source = from(['a', 'b', 'c', 'd']);
const delayPerElements = source
  .pipe(concatMap(v => of(v).pipe(delay(1000))));
delayPerElements.subscribe(it => console.log(it));
// ... a ... b ... c ... d
return delayPerElements;

您可以使用
zip
将流与间隔组合:

zip(
  from(['a', 'b', 'c', 'd']),
  interval(1000),
  (a, b) => a
)
.subscribe(console.log);

zip
将每个流的第n个元素组合成一个数组。这就是我们使用选择器函数的方式:
(a,b)=>a
。它确保只使用第一个流中的元素。
间隔
流仅用于延迟排放。

我遇到了相同的问题,我按照以下代码解决了它

const{from,of}=rxjs;
const{concatMap,delay}=rxjs.operators;
from(['a','b','c'])
.pipe(concatMap((msg)=>of(msg).pipe(延迟(1000)))
.subscribe(console.log)

谢谢你的编辑,我的英语糟透了。你的答案不是我想要的,因为每个元素都会延迟1秒:
1秒。。。a b c
,但我希望每个元素延迟1秒:
…n秒…'a'…n秒…'b'…n秒…'c'
不要使用map+concatAll,只需使用concatMap即可。在这个简单的示例中,它有点有效,但实际上并不能满足您的需要。它将一个元素保留一秒钟,然后管道的其余部分处理该元素,这也需要时间。所以我们没有一个稳定的时间间隔。
const source = from(['a', 'b', 'c', 'd']);
const delayPerElements = source
  .pipe(concatMap(v => of(v).pipe(delay(1000))));
delayPerElements.subscribe(it => console.log(it));
// ... a ... b ... c ... d
return delayPerElements;
zip(
  from(['a', 'b', 'c', 'd']),
  interval(1000),
  (a, b) => a
)
.subscribe(console.log);