1

подскажите есть множество ссылок с клиентами, при клике по ним отправляется запрос с id и получаю ответ с количеством контрактов, после в консоль вывожу если 0

Но проблема в том что свойство workout_contracts в которой записывается результат медленно обновляется, получается при клике условие отрабатывает прошлый результат.

Подскажите как решить проблему ? Или как правильно отработать полученный результат ?

axios.post('api/v2/workout/' , {id : id})
.then(response => this.workout_contracts = response.data)

if (this.workout_contracts == 0) { console.log("Нет активных контрактов"); return null }

2 Answers2

1

Необходимо код проверки добавить туда же в функцию, где идет получение результата запроса.

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

Если вынос этой части был специальным, укажите почему, это позволит принять другое решение.

NocteFury
  • 431
  • 2
  • 8
1

Для того, чтобы всё сработало с тем же примером, нужно сделать следующее:

  • Обьявить метод асинхронным
<script>
      import axios from 'axios';
  export default {
    name : 'TestComponent',
    props : {
      id : {
        type : Number,
        required : true
      }
    },
    methods : {
      async workoutContracts(id) {
        await axios.post('/api/v2/workouts', {id})
        .then(response =&gt;  response.data)
        .then(data =&gt; this.workoutContracts = data.workoutContracts || []);

        if (!this.workoutContracts) {
          console.log('Контракты отсутсвуют');
          return null;
        }
      }
    },
    async mounted() {
      await this.workoutContracts(this.id);
    }
  }
&lt;/script&gt;

Таким образом, Вы сможете корректно обработать результат.

Roman Kozin
  • 1,506
  • Зачем then, если Вы используете await? – Dmytro Jun 29 '20 at 13:28
  • @Дмытрык для того, чтобы сократить обработку данных и отдать только контент с сервера, а не полностью весь Response – Roman Kozin Jun 29 '20 at 13:29