只有当它返回的速度比延迟快时,我才能延迟一个 observable

par*_*ent 6 rxjs rxjs-pipeable-operators rxjs6

举个例子:

 this.http.get('/getdata').pipe(delay(2000))
Run Code Online (Sandbox Code Playgroud)

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

换句话说:

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

  2. 如果请求需要3s才能完成,我希望 observable 在3s 而不是5s 内完成。

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

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

Gre*_*egL 7

要回答所提出的问题,您可以简单地使用combineLatest()组合timer(2000)可观察值和请求可观察值,然后忽略计时器可观察值的结果。它之所以有效,是因为它combineLatest会等到所有可观察量都发出至少一个值后再发出一个值。

combineLatest(this.http.get('/getdata'), timer(2000), x => x)
Run Code Online (Sandbox Code Playgroud)