有条件地基于第一个进行第二次axios调用

时间:2019-10-01 18:41:02

标签: javascript vue.js axios

我正在尝试使其能够从第一个axios调用中查看返回的对象,如果为空,请继续执行第二个操作(如果不为空,我将制作一条错误消息)

基本上,仅当userStatus对象为空时,才应进行第二次axios调用。这两个axios调用都是独立工作的,但是如果对象为空,我如何才能正确地执行此工作,以便我可以打第二个调用?

当前,我在第一个axios调用上得到200,在控制台中有一个空的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 个答案:

答案 0 :(得分:5)

问题是您的代码是同步执行 (基本上是逐行执行),而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');
       }
    });
},