Код запроса прост:
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 мин.
Как его установить?
Вы можете использовать forkJoin
getItem() {
return this.http
.post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
.subscribe(response => {
...
});
}
getItemDelayed() {
return forkJoin(
getItem(),
interval(1000).pipe(take(1))
)
}
При этом каждый наблюдаемый будет выполняться параллельно, но результат будет отправлен только тогда, когда они будут выполнены.
Поэтому, если запрос занимает менее одной секунды, результат будет получен через одну секунду.
Используйте rxjs delay()
.
getItem() {
return this.http
.post<ItemModel>('${this.apiUrl}/${methodUrl}', {})
.pipe(delay(60000)) // <- One min delay
.subscribe(response => {
...
});
}