2017-10-20 3 views
0

Ich erhalteerwarten - Fangfehler - 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')) 
    }) 
} 

Wie kann ich das Versprechen Ablehnung umgehen? Sollte der try catch-Block den Fehler von der Wartefunktion hier nicht abfangen?

Antwort

1

Sie vermischen async/erwarten mit Versprechen. In api.js muss das Schlüsselwort async nicht verwendet werden. Das async Schlüsselwort macht es so, dass alles, was Sie von der Funktion zurückgeben, in ein Versprechen eingeschlossen ist, das Sie nicht brauchen, da axios.get eine Zusage bereits zurückgibt.

Auch Sie haben vergessen, tatsächlich das Versprechen von Axios zurückgeben, Ihre request Funktion gibt einfach zurück undefined.

Schließlich müssen Sie keine Versprechungen Rückkehr aus dem dann und fangen Methoden, nur einen Wert zurückgeben, oder einen Fehler aus.

Wenn Sie die Funktion wie folgt neu schreiben sollte es wie erwartet:

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

danke, ich habe gerade bemerkt, dass ich die Rückkehr Funktion vergessen haben - ok Ich glaube, ich verstehe, ich bin ein Versprechen in einem Versprechen der Rückkehr das ist irgendwie nutzlos – user345234674567

Verwandte Themen