Gestion des erreurs
Dans un environnement de données réelles, les champs peuvent être vides, les recherches peuvent ne rien trouver. Apprenez à gérer ces cas gracieusement.
Pourquoi gérer les erreurs ?
Une formule peut échouer pour plusieurs raisons :
- Un champ optionnel n'est pas renseigné
- Une recherche ne trouve aucun objet
- Une opération sur une valeur nulle
- Un accès à un champ qui n'existe pas
Sans gestion d'erreur, votre formule affichera un message d'erreur peu élégant. Avec une gestion appropriée, vous pouvez afficher une valeur par défaut ou un message clair.
❌ Sans gestion d'erreur
Erreur: Cannot read property 'email' of undefined
✓ Avec gestion d'erreur
Email non renseigné
ifError
expressionRisquee.ifError(valeurSecours)
Tente d'exécuter la première expression. Si elle échoue (erreur quelconque), retourne la valeur de secours à la place.
champ.risque.ifError("valeur par défaut")
// Exemple: recherche qui peut échouer
findObject(client, { id: "{{commande.clientId}}" }).ifError(null
)
// Exemple: calcul qui peut échouer
(facture.total / commande.quantite).ifError(0
)Cas d'utilisation
Recherche d'objet
// Sans gestion : erreur si aucun client trouvé
findObject(client, { email: "{{email}}" }).nom
// Avec gestion : retourne null si pas trouvé
let client = findObject(client, { email: "{{email}}" }).ifError(null
);
client.exists()
? client.nom
: "Client inconnu"Accès à un champ profond
// Accès risqué : le client ou l'adresse peut ne pas exister
commande.client.adresse.ville.ifError("Non renseignée")Calcul avec données manquantes
// Somme qui peut échouer si le tableau n'existe pas
commande.produits.prix.sum().ifError(0)ifEmpty
expression.ifEmpty(valeurSecours)
Évalue l'expression. Si le résultat est null, vide ou undefined, retourne la valeur de secours.
client.telephone.ifEmpty("Non renseigné")
// Exemple: champ optionnel
client.email.ifEmpty("N/A")
// Exemple: tableau potentiellement vide
commande.notes.ifEmpty("Aucune note")Différence avec ifError
ifError capture les erreurs d'exécution(exceptions, accès impossible).ifEmpty gère les valeurs vides valides(null, chaîne vide, undefined).
Cas d'utilisation
Champs optionnels
// Téléphone optionnel
client.telephone.ifEmpty("Non communiqué")
// Email avec fallback
contact.email.ifEmpty(contact.emailSecondaire)Valeurs par défaut
// Taux de TVA par défaut
let tva = produit.tauxTVA.ifEmpty(20);
produit.prixHT * (1 + tva / 100)
// Devise par défaut
let devise = facture.devise.ifEmpty("EUR");
facture.total.concat(" ", devise)Affichage conditionnel
// Afficher le nom commercial ou la raison sociale
client.nomCommercial.ifEmpty(client.raisonSociale)
// Afficher la première valeur non vide
contact.portable.ifEmpty(contact.fixe).ifEmpty("Aucun téléphone"
)Combiner les deux
Dans certains cas, vous aurez besoin des deux fonctions ensemble : d'abord gérer les erreurs, puis les valeurs vides.
// Rechercher un client, gérer l'erreur ET la valeur vide
let client = findObject(client, { email: "{{email}}" }).ifError(null
);
let nomClient = client.nom.ifEmpty("Anonyme");
"Client : ".concat(nomClient)Autre exemple avec un calcul complexe :
// Calcul du prix moyen avec double protection
let prix = commande.produits.prix.average().ifError(0
);
let prixAffiche = prix.ifEmpty(0);
prixAffiche === 0
? "Prix non disponible"
: prixAffiche.toFixed(2).concat(" €")Exemples pratiques
Afficher une adresse complète avec champs optionnels
let ligne1 = client.adresse.ifEmpty("");
let ligne2 = client.complementAdresse.ifEmpty("");
let cp = client.codePostal.ifEmpty("");
let ville = client.ville.ifEmpty("");
let lignes = [ligne1, ligne2, cp.concat(" ", ville)].filter(x => x !== "");
lignes.count() > 0
? lignes.join("\n")
: "Adresse non renseignée"Calculer un total avec produits optionnels
let produits = commande.produits.ifError([]);
commande.produits.count() === 0
? "Aucun produit"
:
let total = commande.produits.map(produit => produit.quantite.ifEmpty(1) * produit.prixUnitaire.ifEmpty(0)
).sum();
total.toFixed(2).concat(" €")Récupérer le dernier commentaire
let commentaires = ticket.commentaires.ifError([]);
commentaires.count() === 0
? "Aucun commentaire"
:
let dernier = commentaires[commentaires.count() - 1].ifError(null);
dernier.texte.ifEmpty("Commentaire vide")Afficher les informations de contact
// Chercher le meilleur moyen de contact
let email = client.email.ifEmpty(null);
let telephone = client.telephone.ifEmpty(null);
let portable = client.portable.ifEmpty(null);
email.exists()
? "📧 ".concat(email)
: portable.exists()
? "📱 ".concat(portable)
: telephone.exists()
? "📞 ".concat(telephone)
: "❌ Aucun contact disponible"Prochaine étape
Découvrez maintenant des exemples pratiques complets qui combinent tout ce que vous avez appris.