Angular 5, как установить минимальную задержку (или тайм-аут)?

1

Код запроса прост:

getItem() {
    return this.http
        .post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
        .subscribe(response => {
            ...
        });
}

Там два случая зависят от того, как долго сервер будет обрабатывать запрос: мы повторно запрашиваем ответ в течение менее 1 минуты и в течение более 1 минуты.

Мне нужно установить минимальную задержку в течение 1 минуты для первого случая, когда мы быстро реагируем на ответ, быстрее, а затем в течение 1 минуты.

Но я не могу упростить добавление задержки в ответ => {} следующим образом:

getItem() {
    return this.http
        .post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
        .subscribe(response => {
            setTimeout(()=>{ ... }, timeoutValue)
            ...
        });
}

Поскольку в этом случае время задержки суммируется со временем отклика, например, если ответ 0,5 мин и timeoutValue == 1 мин, мы будем ждать 1,5 минуты. Мне нужно установить минимальное общее время 1 мин.

Как его установить?

Теги:
angular
delay
timeout
angular-universal

2 ответа

0
Лучший ответ

Вы можете использовать forkJoin

getItem() {
 return this.http
     .post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
     .subscribe(response => {
         ...
     });
}


getItemDelayed() {
    return forkJoin(
         getItem(),
         interval(1000).pipe(take(1))
    )
}

При этом каждый наблюдаемый будет выполняться параллельно, но результат будет отправлен только тогда, когда они будут выполнены.

Поэтому, если запрос занимает менее одной секунды, результат будет получен через одну секунду.

0

Используйте rxjs delay().

getItem() {
     return this.http
         .post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
         .pipe(delay(60000)) // <- One min delay
         .subscribe(response => {
             ...
         });
 }
  • 0
    я должен использовать .pipe (задержка (60000)) вместо .delay (60000)?
  • 0
    Да, мой плохой. Я обновил ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню