我正在
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 44): Error: fail
main.js
import { request } from './api'
async getData({ commit, state }, ids ){
try {
var x = await request(ids)
commit('getData', x.data)
} catch ( e ) {
console.log('request failed get',e.code,e.errno)
}
}
api.js
export async function request(type,url,ids){
axios.get('localhost/data')
.then(function (response) {
return Promise.resolve(response.data)
})
.catch(function (e) {
return Promise.reject(new Error('fail'))
})
}
我如何处理承诺拒绝? try catch块不应该从await函数中捕获错误吗?
答案 0 :(得分:2)
你正在混合async / await和promises。在api.js
中,无需使用 async 关键字。 async 关键字使得您从函数返回的任何内容都包含在您不需要的promise中,因为 axios.get 已经返回了一个promise。 / p>
此外,您忘记实际从Axios返回承诺,您的request
函数只返回 undefined 。
最后,您不必从然后和 catch 方法返回promise,只返回一个值,或者抛出错误。
如果你重写这个函数,它应该按预期工作:
export function request(type,url,ids){
return axios.get('localhost/data')
.then(function (response) {
return response.data
})
.catch(function (e) {
throw new Error('fail')
})
}