Comment est-il possible qu'un nœud ne s'exécute pas ?

Décrivez le problème/l’erreur/la question
J’ai un nœud qui se divise en deux branches parallèles. Chaque branche commence par un nœud Data Table « Get », et les deux nœuds Get reçoivent exactement le même élément d’entrée du nœud parent partagé.
L’un de ces nœuds Get parallèles fonctionne correctement. L’autre ne s’exécute tout simplement pas du tout. Ce qui est amusant, c’est que la seule différence entre les deux nœuds est la table vers laquelle ils pointent. Tout le reste est identique : même entrée, même opération, mêmes paramètres.
J’ai déjà vérifié les choses évidentes :

  • La table vers laquelle le nœud défaillant pointe a été vérifiée comme existante.
  • Les données dans cette table ont été vérifiées, elles sont là.
  • J’ai ajouté une condition (filtre) au nœud, cela n’a pas aidé.
  • J’ai essayé de relocaliser le nœud sur le canevas, cela n’a pas aidé.
  • J’ai soupçonné que le nœud n’avait simplement pas assez de temps pour s’exécuter (une sorte de problème de synchronisation/race condition), alors j’ai vérifié cela attentivement. Ce n’est pas cela.
  • J’ai recréé le nœud à partir de zéro, cela n’a pas aidé.
  • J’ai le reconnecté à la table, cela n’a pas aidé.
  • J’ai changé la sélection de la table de « Choisir dans la liste » à « Par ID », et aussi à « Par nom », cela n’a pas aidé.

La seule chose qui l’a en quelque sorte fait fonctionner a été de déplacer le nœud beaucoup plus loin dans la chaîne, environ 10 nœuds plus tard. J’ai ensuite essayé de le déplacer seulement 5 nœuds vers le bas et 1 nœud vers l’arrière, et il a cessé de fonctionner à nouveau. Donc la position dans la chaîne semble avoir de l’importance, ce que je ne comprends pas pour un nœud qui lit simplement une table.

Cela devient une véritable défaillance quand un nœud en aval référence le nœud par nom avec $('Get node B').all(). Puisque ce nœud ne s’est jamais exécuté, la référence ne retourne rien, tandis que le nœud Get frère sur la même entrée fonctionne parfaitement.
Pourquoi un nœud Get parallèle refuserait-il de s’exécuter alors que son frère avec la même entrée fonctionne bien, et pourquoi seul le fait de le déplacer loin dans la chaîne le corrige-t-il ?

Quel est le message d’erreur (le cas échéant) ?
Pas d’erreur sur le nœud Get lui-même, il s’exécute simplement pas. Le nœud en aval échoue ensuite parce que le nœud référencé ne s’est jamais exécuté.

Partagez la sortie renvoyée par le dernier nœud

(Get node A : retourne ses lignes comme prévu. Get node B, même entrée : pas d'exécution, pas de sortie.)

Informations sur votre configuration n8n

  • Version n8n : 2.25.7
  • Base de données (par défaut : SQLite) : n8n par défaut
  • Exécution de n8n via (Docker, npm, n8n cloud, application de bureau) : n8n cloud
  • Système d’exploitation : n8n cloud

@pohgen ce n’est pas le nœud, c’est l’ordre d’exécution des branches de n8n. Depuis la v1.0, n8n exécute les branches parallèles une à la fois, de haut en bas selon la position sur le canevas, en en terminant une complètement avant la suivante.

Validate Input se divise en trois Gets. n8n exécute le premier, puis le deuxième (Get Routing Rows) et tous ses nœuds en aval, y compris le nœud qui exécute $(‘Get Email Aliases’).all(), et seulement ensuite la branche du bas. Cette référence s’exécute donc avant que Get Email Aliases n’ait tourné, elle retourne vide, et le nœud semble ne jamais s’être exécuté. Le déplacer d’environ 10 nœuds vers le bas le place dans la branche principale avant la référence, donc il s’exécute en premier, c’est l’effet de position.

Solution : ne pas faire de référence entre branches parallèles. Placez Get Email Aliases directement en amont de là où vous l’utilisez, ou ajoutez un nœud Merge pour que toutes les branches se terminent avant que quoi que ce soit en aval ne s’exécute, ce que recommande la documentation de n8n.

Salut @pohgen

Pour corriger cela correctement et garder votre flux de travail propre, vous devez explicitement dire à n8n que les données des branches parallèles sont requises en les rejoignant.

  1. Ajoutez un nœud Merge après vos branches parallèles.
  2. Connectez la sortie de votre branche « fonctionnelle » (par exemple, Get All Candidate Templates) à la première entrée du nœud Merge.
  3. Connectez la sortie de votre branche « défaillante » (par exemple, Get Routing Rows) à la deuxième entrée du nœud Merge.
  4. Définissez le mode du nœud Merge sur « Attendre l’arrivée de toutes les entrées » (ou « Combiner » si vous fusionnez des données).
  5. Placez votre nœud en aval après ce nœud Merge.

Ce faisant, vous créez une connexion physique qui « protège » la branche d’être supprimée, en garantissant que le moteur la reconnaît comme une partie nécessaire de l’exécution.

Ça vous aide ?