我想有条件地插入数据、延迟,然后插入原始事件到 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 }
。
您可以通过在发出原始事件之前插入条件延迟来实现此目的。以下是修改代码的方法:
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 }。
您可以使用
merge
方法来实现您想要的:
concatMap((e) => {
if (e.data === 3) {
return merge(of({ data: 'a' }), of(e).pipe(delay(500)));
}
return of(e);
})