rxjs插入延迟数据

问题描述 投票:0回答:2

我想有条件地插入数据、延迟,然后插入原始事件到 rxjs-Stream 中。

from(Array(10).keys())
  .pipe(
    map(i => ({ data: i })),
    concatMap(e => {
      if (e.data === 3) {
        return of(e)
          .pipe(
            delay(500),
          );
      }
      return of(e);
    }),
  )
  .subscribe(i => console.log(i));

这会在

{ data: 3 }
之前产生延迟。

但是我想发出

{ data: 'a' }
,延迟,
{ data: 3 }

javascript rxjs
2个回答
0
投票

您可以通过在发出原始事件之前插入条件延迟来实现此目的。以下是修改代码的方法:

import { from, of } from 'rxjs';
import { map, concatMap, delay } from 'rxjs/operators';

from(Array(10).keys())
  .pipe(
    map(i => ({ data: i })),
    concatMap(e => {
      if (e.data === 3) {
        return of({ data: 'a' })
          .pipe(
            delay(500),
            concatMap(() => of(e).pipe(delay(500))), // Inserting delay before emitting original event
          );
      }
      return of(e);
    }),
  )
  .subscribe(i => console.log(i));

这将发出 { data: 'a' },然后延迟,然后发出 { data: 3 }。


0
投票

您可以使用

merge
方法来实现您想要的:

 concatMap((e) => {
      if (e.data === 3) {
        return merge(of({ data: 'a' }), of(e).pipe(delay(500)));
      }
      return of(e);
    })

堆栈闪电战

© www.soinside.com 2019 - 2024. All rights reserved.