Полагаю, this.parkingService.getparkingDetails()
- асинхронная функция, подобная HTTP-запросу. В этом случае использование явного l oop - плохая идея. Потому что у вас будет несколько одновременных HTTP-запросов. Было бы несколько экземпляров ответов, и было бы непонятно, какой именно ответ обрабатывается.
Вы можете попробовать использовать рекурсивную функцию в качестве внутренней функции для достижения того, что вам требуется
private getParkingDetails(index: number, limit: number) {
let subscription: any;
const _getParkingDetails = (index: number) => { // <-- inner function to retain the `limit` argument
if (subscription) { // <-- cancel existing request if any
subscription.unsubscribe();
}
subscription = this.parkingService.getparkingDetails().subscribe(
data => {
const lista: number[] = data.spaces_occupied.conventional[index];
console.log(lista);
if(lista.indexOf(plate) !== -1) {
this.listindex.push(index);
if (index <= limit) {
index++;
_getParkingDetails(index); // <-- http request fired again here
}
}
},
error => { console.error(error); }
);
};
}
Тогда это можно назвать
this.getParkingDetails(b3, b4);
Теперь мы можем быть уверены, что подобные HTTP-запросы сериализуются вместо параллельных запросов.
Однако это только обходной путь. Правильным решением было бы изменить структуру данных так, чтобы вам нужно было выполнять несколько сериализованных HTTP-запросов. Это может значительно замедлить работу пользователя.