RxJs跳过startWith值上的sampleTime



我想跳过startWith值上的sampleTime。可观察对象应该立即发出false,然后才使用sampleTime。

我想让Observable发出布尔值。在点击加载按钮时,应该显示Loadingspinner,直到数据被传递,但至少持续一秒钟。data$ Observable立即发出null,然后最终发出请求的数据。

showLoadingSpinner$ = this.data$.pipe(
map(x => x == null),
sampleTime(1000),
startWith(false),
)

我该怎么做?我应该使用不同的操作符吗?

那么你可以使用concat,这个可观察对象将按顺序执行,首先我们创建一个只取第一个值而不取sampleTime的可观察对象,然后在take完成后我们将转到第二个可观察对象那里我们有sampleTime

const data$ = rxjs.interval(1000);
let first = true;
showLoadingSpinner$ = rxjs.concat(
data$.pipe(rxjs.take(1)), // first
data$.pipe(rxjs.sampleTime(2000)) // second
).pipe(
rxjs.map(x => x == null),
rxjs.startWith(false),
).subscribe(console.log)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.6.0/rxjs.umd.min.js" integrity="sha512-  ejsljG9xAKvLl8gCL5FQmGLQ5dZvr2g9n7iwBYG3bIAmfPwjA4P2tX6lvvj2ry+cUpmiuBaF70F3Y5/6o/KrPQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

最新更新