在使用 Vue 開發過程中,我們經常會用到 async/await 結合 Promise 進行異步操作。然而,當在 Vue 組件中使用 await 時,有時候會報出以下錯誤:
Uncaught (in promise) Error: Actions must be plain objects. Use custom middleware for async actions.
這個錯誤通常是由于在使用 await 的時候,返回的數據不是 Object 類型而造成的。解決這個錯誤的方法非常簡單,在調用后面的 .then() 方法之前,將返回值轉換成 Object 類型即可。
async fetchData() { // http.get() 返回的是一個 Promise const data = await http.get('/user') return { data: data.data } }
可以看到,我們在 fetchData() 方法中使用了 await,等待 http.get() 方法返回數據。這里的 data 是一個 Axios 的 response 對象,而不是一個普通的 Object。此時,如果直接返回這個 response 對象,會造成上述的錯誤。
因此,我們需要在返回 response 數據之前,將其轉換為 Object 類型:
async fetchData() { const data = await http.get('/user').then(res =>res.data) return { data: data } }
這樣修改后,返回的 data 就是一個 Object 了,就可以愉快地寫業務邏輯啦。