rxjs - 只有当它返回的速度比延迟快时,我才能延迟一个可观察的
问题描述
举个例子:
this.http.get('/getdata').pipe(delay(2000))
我希望此请求至少需要 2 秒才能完成,但不会超过完成请求所需的时间。
换句话说:
如果请求需要1s完成,我希望 observable 在2s完成。
如果请求需要3s完成,我希望 observable 在3s NOT 5s内完成。
是否有其他管道delay()
可以实现我不知道的这一点,或者是否有办法为此构建自定义管道?
用例是显示一个加载器,但是如果请求完成得太快,当加载器只是“闪烁”一秒钟时,它看起来并不好
解决方案
要回答所问的问题,您可以简单地使用combineLatest()
将timer(2000)
observable 和 request observable 结合起来,然后忽略来自 timer observable 的结果。它之所以有效,是因为combineLatest
要等到所有可观察对象都发出至少一个值,然后再发出一个值。
combineLatest(this.http.get('/getdata'), timer(2000), x => x)
推荐阅读
- visual-studio - 附加非托管 DLL 以与 VS 安装程序包一起使用
- azure - 如何在 Azure Portal 中监控 Azure Kubernetes Cluster 资源状态?
- symfony - Symfony 4,传递给 .. 的参数 1 必须是 DateTime 的实例,给定 null
- laravel - 无法在组件上导入主 js 文件
- c# - 我可以利用任何类型的 API/RSS 提要来查找 CefSharp 更新,尤其是安全更新吗?
- vb.net - VB.NET 仅从一个字段访问填充组合框
- python - 保持元素计数并检索计数在范围内的元素的数据结构
- python - 如何在 python 中解决这个 random.choice 问题?
- prolog - (序言)我可以抽象出这种模式的所有排列,而不必单独编写每个排列吗?
- c - 当多值列上的 itagSequence = 0 时,什么类型的值返回 JetRetrieveColumns?