Angular: размещение данных в таблице с помощью al oop и возникновение проблемы при публикации i of l oop в таблицу - PullRequest
0 голосов
/ 01 марта 2020

Добрый день,

Я пытаюсь получить данные в таблицу, с помощью tour_id и каждого отдельного media_id (station_id, который я получаю откуда-то еще), порядковый номер вызывает у меня головную боль: Я пытаюсь получить каждую станцию ​​по одному номеру для каждого носителя, который я публикую.

Например: у станции 1 есть 2 носителя, а у станции 2 3

, тогда порядковые номера должны быть такими: 0 , 0, 1, 1, 1

В данный момент я использую следующий код:

for(var i = 0; i < this.currentStations.length; i++){
              this.http.get("http://localhost:3000/mediasforstation/" + this.currentStations[i].id).subscribe((res) => {
                medias = res;

                for (var j = 0; j < medias.length; j++){
                  this.http.post("http://localhost:3000/posttourstations",
                  {"tour_id": id,  "media_id": medias[j].id, "ordernumber": i}).subscribe(function(res) {
                    console.log(res);
                  }.bind(this));
                }
              });
            }

Все, кроме номера заказа, работает, однако номер заказа всегда принимает количество задействованных станций , в нашем примере выше это будет 2.

Как мне это исправить?

Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 01 марта 2020

Как я понимаю, вам нужно сохранить значение индекса. Тип переменной i равен var, то есть function scoped. В пределах внешнего l oop вы вызываете API, который возвращает некоторый ответ, в то время как значение i обновляется, и для следующего индекса / счетчика был отправлен вызов API. Когда вы получаете ответ от вызовов API, вы получаете значение i, где был вызван внешний l oop.

Другими словами, вы должны понимать разницу между var и let. Ваша проблема может быть решена путем замены

     for(var i=0;...)

на

     for(let i=0;...)

Вот вам пример кода.

     //block scoped - retains value of i
     for (let i=0;i<10;i++){
        this.http.get('https://jsonplaceholder.typicode.com/users').subscribe(res=>{
        for(var j=0;j<5;j++){
            console.log(`i=>${i}`)
        }
       })
      }

     //function scoped - gets updated value of i
     for (var i=0;i<10;i++){
        http.get('https://jsonplaceholder.typicode.com/users').subscribe(res=>{
        for(var j=0;j<5;j++){
           console.log(`i=>${i}`)
        }
      })

    }
...