Я рекурсивно потребляю внешний API, ожидая завершения другого вызова API.HTTP-вызовы выполняются с использованием import {HttpClient} from '@angular/common/http'
. Я новичок в фреймворке и, возможно, в коде что-то не так, но рабочий процесс такой:
Первый APIвызов сделан этим блоком
initializeCrawling(): void {
this.callCrawlInitializingAPI() // this method is calling the api
.subscribe(
restItems => {
this.groupCrawlingRestResponse = restItems;
console.log(this.groupCrawlingRestResponse);
this.isCrawlActive = false;
}
)
this.fetchResults(); // while callCrawlInitializingAPi call executes, this block here must executed on paralel.
}
Теперь я объявляю глобальную
логическую
переменную, которая станет false
при this.callCrawlInitializingAPI()
execute finish.
Вот код для второго вызова API, который должен вызываться рекурсивно.
fetchResults(): void {
this.fetchDataApiCall()
.subscribe(
restItems => {
this.groupCrawlingRestResponse = restItems;
console.log(this.groupCrawlingRestResponse);
}
)
}
fetchDataApiCall() {
do {
this.http
.get<any[]>(this.fetchResultsUrl, this.groupCrawlingResultRestResponse)
.pipe(map(data => data));
console.log("Delaying 3000");
} while (this.isCrawlActive);
}
Цель здесь - задержать цикл do - while, скажем, на 1 секунду.
Я попробовал следующее: 1 - импортировать {delay} из "rxjs / internal / operator" и использовать, как указано выше;
do {
this.http
.get<any[]>(this.fetchResultsUrl, this.groupCrawlingResultRestResponse)
.pipe(map(data => data));
console.log("Delaying 3000");
delay(3000);
} while (this.isCrawlActive);
2 - использовать функцию setTimeout (), как указано выше:
do {
setTimeout(function(){
this.http
.get<any[]>(this.fetchResultsUrl, this.groupCrawlingResultRestResponse)
.pipe(map(data => data));}, 1000)
} while (this.isCrawlActive)
Ни один из них не работает, и, насколько я понимаю, цикл do while не задерживается и обрабатывает много вызовов, как do while.
Прежде всего яхочу знать, как заставить это работать и, во-вторых, есть ли лучший способ сделать это с Angular, так как яплохо знакомы с фреймворком.
Спасибо
ОБНОВЛЕНИЕ
На мой вопрос есть правильный ответ, если кто-нибудь будет искать его в будущем.
Единственное, что мне пришлось изменить, - это строка кода clearInterval(intervalHolder.id)