2017-10-28 196 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

相關問題