Promesse: then contre catch
Ces fragments de code sont-ils égaux? En d’autres termes, se comportent-ils de la même manière en toutes circonstances, pour toutes les fonctions gestionnaires?
promise.then(f1).catch(f2);
Contre:
promise.then(f1, f2);
La réponse courte est : non, ils ne sont pas égaux :
La différence est que si une erreur survient dans f1
, elle est gérée par .catch
ici :
promise
.then(f1)
.catch(f2);
…Mais pas ici:
promise
.then(f1, f2);
En effet, une erreur est transmise dans la chaîne et, dans le second code, il n’y a pas de chaîne à la suite de f1
.
En d’autres termes, .then
transmet les résultats/erreurs au prochain .then/catch
. Donc, dans le premier exemple, il y a un catch
en dessous, et dans le second – il n’y en a pas, donc l’erreur n’est pas gérée.