vue axios then 函数返回 获取不到值

 upimg(val){
        var self = this  
        var backdata =""
        this.axios.post('/upload/Upload', val)
          .then(response => {
            if (response.data.code === 0) {
                  this.backdata=response.data.data
                  console.log(this.backdata)
                  console.log(backdata)
            }
            console.log(response.data)
          }
        )
        console.log(this.backdata)
        console.log(backdata)
        returun backdata
      }

想用带参函数 获取 返回值 但是 不知道为什么获取不到值? 输出的 backdata 都是 undefined

应该如何赋值给backdata ?

阅读 16k
5 个回答

ajax post是异步的 post还没执行完 backdata当然是空的, 这样写就行了


async function upimg(val) {
    console.log('calling');
    let post = ()=>{
        return new Promise(resolve => {
            this.ajax.post('/upload/Upload', val)
                .then(response => {
                    if (response.data.code === 0) {
                        resolve(response.data.data);
                    }
                })
        });
    }
    let result = await post();
    console.log(result);
}

等待post结束后 再返回值

先搞清楚异步回调吧

好吧 虽然不是最好的结果 但是我使用了 Promise 解决了

新手上路,请多包涵

self.backdata=response.data.data
this引用错了

两种解决办法:
1、首先axios方法得到的是一个promise,所以你只要在actions的then里return axios()就行了

upimg(val){
        return this.axios.post('/upload/Upload', val)
          .then(response => {
            if (response.data.code === 0) {
                 return response.data.data
            }
          }
        )
      }

2、使用 async、await异步化即可。(强烈推荐使用)

async upimg(val){
      const response= await this.axios.post('/upload/Upload', val)
      return response.data.data
      }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题