2017-10-20 6 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関数からエラーをキャッチしてはいけませんか?

答えて

1

約束事で非同期/待機を混在させています。 api.jsには、asyncキーワードを使用する必要はありません。 の非同期キーワードは、関数から返されたものが約束で包まれるようにします。axios.getはすでに約束を返します。

また、実際にAxiosから約束を返すのを忘れた場合、request関数はを返します。定義されていないのはです。

最後に、あなただけの値を返し、その後、とキャッチ方法をからの約束を返すか、エラーをスローする必要はありません。

あなたはこのように機能を書き換えた場合、それは期待通りに動作するはずです: - [OK]を私は約束の内側に約束を返すよ、私は理解して考える

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

関連する問題