2017-10-20 7 views
0

Je reçoisattendent - erreur de capture - 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')) 
    }) 
} 

Comment puis-je gérer le rejet de la promesse? Le bloc try catch ne devrait-il pas attraper l'erreur de la fonction d'attente ici?

Répondre

1

Vous mélangez async/wait avec des promesses. Dans api.js, il n'est pas nécessaire d'utiliser le mot-clé async. Le mot-clé async fait en sorte que tout ce que vous retournez de la fonction soit enveloppé dans une promesse, dont vous n'avez pas besoin, car axios.get renvoie déjà une promesse.

En outre, vous avez oublié de renvoyer la promesse d'Axios, votre fonction request renvoie simplement undefined.

Enfin, vous n'avez pas retourner les promesses de la puis et prises méthodes, il suffit de retourner une valeur ou une erreur.

Si vous réécrivez la fonction comme cela, il devrait fonctionner comme prévu:

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

merci, je viens de remarquer que j'ai oublié la fonction de retour - ok, je pense que je comprends, je reviens une promesse à l'intérieur d'une promesse ce qui est un peu inutile – user345234674567