Как использовать break в Angular 2? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть список, в котором каждый слот имеет массив номерных знаков.

Я хочу создать список с номерами (индексами) слотов, где есть входная пластина (пластина) и если пластина не не существует, я хочу сломаться, но здесь разрыв создает проблему. Как я могу использовать «перерыв»?

listindex:number[]=[];
for (let index: number= b3; index <= b4; index++) 
      {
      this.parkingService.getparkingDetails().subscribe(


        data=>
        {

        var lista:number[] = data.spaces_occupied.conventional[index]
        window.alert(lista)

        if(lista.indexOf(plate)!= -1)
        {
          this.listindex.push(index); 

        }
          else {

            break;
           }





      },
      error => alert(error)
    ); 

    }


    this.parkingpost={
      "parking_site_id": this.parkingid,
      "licence_plate": plate ,
      "indexes": this.listindex,
      "operation_type":"remove",
      "spot_type": "conventional" 

    }

1 Ответ

0 голосов
/ 10 апреля 2020

Полагаю, 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-запросов. Это может значительно замедлить работу пользователя.

...