RxJS 发出字符串数组,彼此间隔一秒

Dam*_*n C 4 javascript rxjs typescript angular

我有一个代码块,负责获取一个Observable<string[]>,然后将其映射到Observable<string>并发出彼此相隔 1 秒的值。

可以将其想象为网站上的消息滚动条。

我当前的代码运行如下:

    const arrayOfStrings$ = of([
        'Warming things up',
        'Getting things ready',
        'Welcome'
    ]);

    this.messages$ = arrayOfStrings$.pipe(
        switchMap((messages) => from(messages).pipe(
            concatMap((innerMessage) => of(innerMessage).pipe(delay(1000))),
        )),
        tap((message) => {
            console.log(`Message: ${message}`);
        })
    );
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法用更少的代码来做到这一点?困扰我的主要是彼此之间的switchMap()关系。concatMap()

感谢您的任何帮助和建议。

编辑:这是我在实际项目中运行的简化版本。我只是想找到一种更简单的方法从 Observable<string[]> 到 Observable 并在每次发射后将每次发射延迟一秒

mar*_*tin 7

您可以使用concatMap()delay()运算符来确保每次发射都会以指定的时间间隔逐一传送。

const arrayOfStrings = [
  'Warming things up',
  'Getting things ready',
  'Welcome'
];

(from(arrayOfStrings)
  .pipe(
    concatMap(message => 
      of(message).pipe(delay(1_000))
    ),
  )
  .subscribe()
);
Run Code Online (Sandbox Code Playgroud)