HTTP-вызов асинхронный. Таким образом, вы можете вызывать другой HTTP-вызов, пока предыдущий еще не завершен. Каждый браузер имеет определенный порог для одновременных подключений к хосту (например, Chrome - 6), выше которого все запросы HTTP будут удерживаться до тех пор, пока предыдущие запросы не возвратят ответ. Вот почему вы не получаете никакого ответа.
Вы также говорите, что вам нужно повторить вызов после обновления данных. В данный момент вы повторяете вызов, не зная, был ли запрос завершен или нет.
Для этого вы можете использовать setTimeout()
внутри каждого обратного вызова для обходного решения вместо l oop. Но остерегайтесь, это идет с тяжелыми оговорками. После вызова функция повторяется непрерывно, если она не остановлена на clearTimeout(timeoutId)
.
private timeoutId: any;
public makeApiCall(refreshInterval, url, params, payload) {
this.serviceInvoker.invoke(url, params, payload).subscribe(
(success) => {
// handle success
this.timeoutId = setTimeout(() => { this.makeApiCall(url, params, payload) }, refreshInterval * 1000);
},
(err) => {
// handle error
this.timeoutId = setTimeout(() => { this.makeApiCall(url, params, payload) }, refreshInterval * 1000);
}
);
}