Как я могу задержать наблюдаемое, только если оно возвращается быстрее, чем задержка - PullRequest
0 голосов
/ 04 января 2019

Возьмем, к примеру:

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

Я бы хотел, чтобы этот запрос занял минимум из 2 с, но не дольше, чем требуется для выполнения запроса.

Другими словами:

  1. , если запрос занимает , я хочу, чтобы наблюдаемое завершилось за 2s .

  2. если для выполнения запроса требуется 3 с , я хочу, чтобы наблюдаемое завершилось за 3 с НЕ 5 с .

Есть ли какая-то другая труба, кроме delay(), которая может достичь этого, о которой я не знаю, или есть ли способ построить собственную трубу для этого при необходимости?

Вариант использования - показать загрузчик, однако, если запрос завершается слишком быстро, он не выглядит хорошо, когда загрузчик просто "мигает" в течение доли секунды

1 Ответ

0 голосов
/ 04 января 2019

Чтобы ответить на заданный вопрос, вы можете просто использовать combineLatest(), чтобы объединить наблюдаемое timer(2000) и наблюдаемый запрос, а затем просто проигнорировать результат из наблюдаемого таймера.Это работает, потому что combineLatest ждет, пока все наблюдаемые не испустят хотя бы одно значение, прежде чем испустить его само.

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