Проблема на Vue / Ax ios - заполнение карт не так - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над проектом с использованием карт, чтобы показать пользователю "юниверс", в который они могут войти.

Фактически, пользователь может быть администратором в данной юниверсе, и он может быть просто один игрок на другом, вот пример.

A normal case

Здесь пользователь получил корону и корзину рядом с «Test Realm», так что он админ, и он постоянный игрок "Royaume de test". Когда вы создаете сервер, на котором вы становитесь администратором, он автоматически попадает на верх всех остальных серверов.

Произошли две вещи, которые сделали его немного глупым.

Empty

Здесь, в этом случае, пользователь только что подключился, и результаты его области не отображаются. Этот случай решается с помощью кнопки «Rechargez le contenu», которая помогает перезагрузить контент, но ...

Big big problem are here

UserTest подключился в другой раз , но на этот раз карты просто загружают его в качестве администратора "Royaume de test", но у него даже нет прав на него. Но так как он может нажать на корону, которая связана с царством, он имеет власть на всем и может даже разрушить мир, который он не создал.

Так вот моя проблема, я использую метод, который выполняет вызов ax ios, заканчивающийся на Promise, но я не вижу, где я ошибаюсь

      fillCards: function(){
      let tempCard = []
      if(this.CardsLogData == 0){

              axios.get(XXXXXXXXXXX)
              .then(async (response) => {

                for(let universe of response.data){
                  axios.get(XXXXXXXXXX)
                  .then(response =>{
                    tempCard.push(response.data)
                    console.log('recupCard', tempCard)
                  })
                  .catch(function (error) {console.log(error);})
                }


                Promise.all(tempCard)
                  .then((res) => {
                    axios.get(XXXXXXXXXXXXX)
                    .then(response=>{
                      for(let i in response.data){
                            tempCard[i].idRight = response.data[i].idRights
                        }
                      this.cards = tempCard;
                      })
                      .catch(function (error) {console.log(error);})
                  })
                  .catch(function (error) {console.log(error);})

              })
              .catch(function (error) {console.log(error);})

      }
      },

Метод вызывается на смонтированном

XXXXXXX просто вещи, которые я не хочу публиковать c ^^ '

И вот как корона и мусорное ведро отображаются вдоль карты.

        <b-card 
          bg-variant="dark" 
          text-variant="white" 
          class="text-center mb-2"
          v-for="value in cards"
          v-bind:key="value.idUniverse">

            <b-card-text>{{ value.name }} {{ value.firstname }} {{ value.lastname }}</b-card-text>
            <img class="logocrown" v-if="value.idRight == 1" src="./../assets/crown.png" v-on:click="goAdmin(value.idUniverse, value.name)"/>
            {{ value.idRights }}

            <b-button href="#" variant="primary" v-if="CardsLogData<=0" v-on:click="cardsAction(value.idUniverse)">{{ CardMessage }}</b-button>
            <img class="logogarb" v-if="value.idRight == 1" src="./../assets/garbage.png" v-on:click="destroy(value.idUniverse)"/>
            <b-button href="#" variant="primary" v-if="CardsLogData==1" v-on:click="cardsAction(value.idCharacters)">{{ CardMessage }}</b-button>

        </b-card>

Я не могу чтобы понять, в чем проблема, я все еще могу сделать проверку, как только пользователь попадет в панель администратора, чтобы проверить, действительно ли он является администратором текущей юниверса, которую он использует, но это немного "гетто", я предпочитаю это делать, плюс найти способ не получить права администратора в юниверсе, которые пользователь не должен.

1 Ответ

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

Не понимая весь ваш код, я вижу одну проблему: когда выполняется Promise.all(tempCard), он может быть пустым, потому что обещания помещаются в tempCard только после того, как ax ios возвращает ответ.

Я думаю, что это немного необычно, потому что tempCard должен быть массивом обещаний для Promise.all

Я не пробовал, но я думаю, что ваш код будет работать лучше, как показано ниже, tempCard будет массивом обещаний, и он будет ждать завершения всех обещаний до конца sh, прежде чем продолжить.

for(let universe of response.data) {
   tempCard.push(axios.get(XXXXXXXXXX));
}

У вас также есть несколько переменных, называемых response, я бы предложил изменить их чтобы уменьшить путаницу.

...