2017-09-11 4 views
1

Soit p une promesse que nous pouvons faireComment gérer les erreurs de plusieurs, puis en capture de promesses javascript?

p 
.then(f1) 
.then(f2) 
.then(f3) 
.catch(f4) 

maintenant des prises, l'erreur peut être jeté de l'un des f1, f2, f3 ou même p rejeté

maintenant ce qui devrait être la bonne façon de gérer erreurs dans f4 (ou dans catch), comme les erreurs levées ci-dessus peuvent être de types différents, Est-ce que multiple peut être évité dans f4 ?

Répondre

0

définissent un rappel juste catch supplémentaire:

p 
.then(f1) 
.then(f2) 
.then(f3) 
.catch(err => { 
    if (/* is expected error */) { 
    console.log(err); 
    return; 
    } 
    throw new Error('Unexpected error'); 
}) 
.catch(err => ...) 
0

Vous pouvez définir votre propre erreur personnalisée. Par exemple:

function CustomError(errorText){ 
    this.error = errorText; 
} 

Modifiez vos fonctions. Ajouter bloc catch pour chaque promesse retournée de la fonction:

function p(){ 
    return new Promise(function(resolve, reject){ 
      //Your functionality here 
     }) 
      .catch(function(error){ 
      Promise.reject(new CustomError('f1'))); 
     }) 
} 

Et ainsi de suite: f2, f3, f4

Et votre bloc catch sera:

.catch((err) => { 
    if(err instanceof CustomError){ 
     HandleCustomError(err); 
    } else { 
     //Some another error is happen 
    } 
}) 

Et vous gestionnaire d'erreur personnalisé sera être quelque chose comme ça:

function HandleCustomError(customError){ 
    switch(customError.error){ 
     case 'f1': 
      //handle f1 
      break; 
     case 'f2': 
      //handle f2 
      break; 
     ... 
    } 
}