как продолжать вызывать api до тех пор, пока результат не будет получен в Angular

#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. Если ответ-это то, что вам нужно, вы можете отказаться от подписки с интервалом.