首页 > 解决方案 > 只有当它返回的速度比延迟快时,我才能延迟一个可观察的

问题描述

举个例子:

 this.http.get('/getdata').pipe(delay(2000))

我希望此请求至少需要 2 秒才能完成,但不会超过完成请求所需的时间。

换句话说:

  1. 如果请求需要1s完成,我希望 observable 在2s完成。

  2. 如果请求需要3s完成,我希望 observable 在3s NOT 5s内完成。

是否有其他管道delay()可以实现我不知道的这一点,或者是否有办法为此构建自定义管道?

用例是显示一个加载器,但是如果请求完成得太快,当加载器只是“闪烁”一秒钟时,它看起来并不好

标签: rxjsrxjs6rxjs-pipeable-operators

解决方案


要回答所问的问题,您可以简单地使用combineLatest()timer(2000)observable 和 request observable 结合起来,然后忽略来自 timer observable 的结果。它之所以有效,是因为combineLatest要等到所有可观察对象都发出至少一个值,然后再发出一个值。

combineLatest(this.http.get('/getdata'), timer(2000), x => x)

推荐阅读