如何解决rxjs:仅在加载> 1s时显示加载微调器
我有一个主题refreshData$
会触发数据重新获取:
const data$ = refreshData$.pipe(
switchMap(() => dataService.load())
);
仅在加载时间超过1秒时才需要显示加载指示器。如果数据不到1秒到达-不要显示微调框。
找到了很好的答案here,但每次刷新时都会重新创建可观察值。我想重用它们。我从以下内容开始,但是它只能运行一次。我猜这里takeUntil
必须用其他东西代替。
const showSpinner$ = merge(
refreshData$.pipe(
delay(1000),mapTo(true),takeUntil(data$) // FIXME: only shows loading once
),data$.pipe(
timeInterval(),mapTo(false)
)
);
----
to be used in template as:
<loading-spinner *ngIf="showSpinner|async"></loading-spinner>
解决方法
我将创建一个一次性流,以便如果takeUntil()
尽早终止它,则您的外部可观察值(showSpinner$
)将会继续。
const showSpinner$ = merge(
refreshData$.pipe(
switchMap(_ => timer(1000).pipe(
mapTo(true),takeUntil(data$)
))
),data$.pipe(
mapTo(false)
)
);
,
您尝试过这样的事情吗?
const showSpinner$ = refreshData$.pipe(
switchMap(() => timer(1000)),mapTo(true),takeUntil(data$),endWith(false),);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。