2017-10-28 192 views
2

我在vuejs中有一个用于文件上传的小组件(使用axios)。我试图从发出文件上传这样的回应:如何在vuejs发出respose之前等待axios响应

methods: { 
    ... 
    upload(){ 
    axios.put(URL).then(response => { 

    console.log('response', response) 
    this.$emit('uploaded', response) 

    }).catch(error => { 

    }) 
    } 

} 

但在此代码,即使console.log()响应显示了罚款,所述发送显示undefined。我认为在响应准备好之前发出的是被调用的。

反正有异步/等待解决这个问题吗?

回答

2

console.log响应显示正常,但发射显示未定义。

不确定你的意思,因为如果响应在console.log内部可用,它也应该在this.$emit内部可用。 (除非this.$emit本身给你undefined在这种情况下你有确定范围的问题,但不应该这样,因为你似乎在使用箭头函数)。

我觉得EMIT获取调用之前响应准备

这是一个回调的内部,一旦请求完成它应该只被调用。

但是,如果你想尝试异步/等待然后做到这一点:

async upload() { 
    try { 
    let response = await axios.put(URL); 
    console.log('response', response) 
    this.$emit('uploaded', response) 
    } catch(error) { 
    // error 
    } 
} 
+0

我觉得这是工作。我会尝试几次来确定,但我不明白你为什么需要try/catch? – hidar

+0

try catch与.then和.catch类似,它就在那里,因此您知道您的操作是成功还是失败 – linasmnew