условно сделать 2-й аксиос вызов на основе первого - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь сделать так, чтобы я мог смотреть на возвращенный объект из первого вызова axios, и, если он пуст, перейти ко 2-му (если он не пуст, я создам сообщение об ошибке)

По сути, 2-й осевой вызов должен произойти, только если объект userStatus пуст. Оба вызова axios работают независимо, но как я могу правильно выполнить эту работу, чтобы я мог выполнить второй вызов, если объект пуст?

В настоящее время я получаю 200 при первом вызове axios и пустой объект userStatus в моемконсоль, но второй вызов не происходит

changeStatus: function(event) {

  let user = this.auth_user;

  axios.get('/user/' + user + '/status')
  .then((response) => {
      this.userStatus = response.data
  })

  if(this.userStatus.length < 1){

    let data = {
        id: event.id,
        status: 'A'
    };

    axios.post('/status/change',data)
    .then((response) => {
        if (response.data.success == false) {
            this.errors = [];
            const errorLog = Object.entries(response.data.errors);
            for (var i = errorLog.length - 1; i >= 0; i--) {
                console.log(errorLog[i][1][0]);
                this.errors.push(errorLog[i][1][0]);
            }
        }
    })


  }else{
    console.dir('No');
  }
},

1 Ответ

5 голосов
/ 01 октября 2019

Проблема в том, что ваш код выполняется синхронно (по существу, построчно), в то время как вызовы axios a синхронны . Таким образом, пока ваш первый вызов axios все еще выполняется в фоновом режиме, оператор if(this.userStatus.length < 1) оценивается до того, как ваш первый вызов вернулся.

Если ваш второй вызов обусловлен результатом вашего первого вызова, вы бынеобходимо сделать второй вызов внутри обработчик .then() вашего первого вызова:

changeStatus: function(event) {
  let user = this.auth_user;

  axios.get('/user/' + user + '/status')
    .then((response) => {
      this.userStatus = response.data;

      if(this.userStatus.length < 1) {
        let data = {
          id: event.id,
          status: 'A'
        };

        axios.post('/status/change',data)
          .then((response) => {
            if (response.data.success == false) {
              this.errors = [];
              const errorLog = Object.entries(response.data.errors);

              for (var i = errorLog.length - 1; i >= 0; i--) {
                console.log(errorLog[i][1][0]);
                this.errors.push(errorLog[i][1][0]);
              }
            }
          });
       } else {
         console.dir('No');
       }
    });
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...