#angular
Вопрос:
У меня есть api, который мне нужно продолжать вызывать, пока результат не будет готов для извлечения
SendToBank(){
this.http.get(`http://localhost:44301/consentinitiation/${this.qid}`).subscribe(s=>{
this.qrcodelink=s["qrCodeLink"];
});
qrCodeLink-это свойство внутри моего результата,которое мне нужно ,у него есть и другие свойства ,иногда через 5 секунд результат бывает иногда через 10 секунд, но мне нужно поместить загрузчик в мой интерфейс и продолжать вызывать его, пока я не получу результат, какая-нибудь помощь?
Ответ №1:
Вы можете передать наблюдаемое по каналу, чтобы повторить запрос. Вы можете использовать интервал или максимальное количество повторных попыток:
this.http.get("`http://localhost:44301/consentinitiation/${this.qid}`")
.pipe(retryWhen(_ => {
return interval(5000)
}))
.subscribe(result => ...)
}
Или лучше попрактиковаться:
this.http.get("`http://localhost:44301/consentinitiation/${this.qid}`")
.pipe(
retry(3),
catchError(() => { // Handle error
...
}),
... // Some more pipes
)
.subscribe(result => ...)
}
Все, что угодно, кроме повторной попытки, конечно, необязательно, вы можете использовать все, что захотите…
Ответ №2:
Вы можете использовать интервал с выбранным вами периодом времени и вызвать api внутри его подписки, а также проверить, соответствует ли вам ответ api. Если ответ-это то, что вам нужно, вы можете отказаться от подписки с интервалом.