2017-10-20 5 views
0

내가이 기다리고 - 캐치 오류 - UnhandledPromiseRejectionWarning

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 함수에서 오류를 catch하지 않아야합니까?

답변

1

약속과 비동기/대기 중을 혼합합니다. api.js에는 비동기 키워드를 사용할 필요가 없습니다. 비동기식 키워드를 사용하면 함수에서 반환 한 모든 내용을 약속하지 않고 약속 할 수 있습니다. axios.get은 이미 약속을 반환합니다.

실제로 Axios로부터 약속을 반환하는 것을 잊어 버린 경우 request 함수는 을 정의하지 않고으로 반환합니다.

마지막으로, 당신은 단지 값을 반환 한 후 및 캐치 방법을 에서 약속을 돌아가거나 오류가 발생 할 필요가 없습니다.

이 같은 기능을 재 작성하면 예상대로 작동합니다 : - 좋아 내가 약속 안에 약속을 반환하고있어, 이해 생각

export function request(type,url,ids){ 
    return axios.get('localhost/data') 
    .then(function (response) { 
     return response.data 
    }) 
    .catch(function (e) { 
     throw new Error('fail') 
    }) 
} 
+0

덕분에, 난 그냥 리턴 기능을 잊었 것으로 나타났습니다 다소 쓸모없는 – user345234674567