¿Cómo es posible que un nodo no se ejecute?

Describe el problema/error/pregunta
Tengo un nodo que se divide en dos ramas paralelas. Cada rama comienza con un nodo Data Table “Get”, y ambos nodos Get reciben el mismo elemento de entrada exactamente del nodo padre compartido.
Uno de estos nodos Get paralelos funciona bien. El otro simplemente no se ejecuta en absoluto. Lo curioso es que la única diferencia entre los dos nodos es la tabla a la que apuntan. Todo lo demás es idéntico: la misma entrada, la misma operación, la misma configuración.
Ya he verificado las cosas obvias:

  • Se ha verificado que la tabla a la que apunta el nodo que falla existe.
  • Se han verificado los datos dentro de esa tabla, están ahí.
  • Agregué una condición (filtro) al nodo, no ayudó.
  • Intenté reposicionar el nodo en el lienzo, no ayudó.
  • Sospechaba que el nodo simplemente no tenía suficiente tiempo para ejecutarse (algún tipo de problema de tiempo/carrera), así que lo verificué cuidadosamente. No es eso.
  • Recreé el nodo desde cero, no ayudó.
  • Lo reconecté a la tabla, no ayudó.
  • Cambié la selección de tabla de “Elegir de la lista” a “Por ID”, y también a “Por nombre”, no ayudó.

Lo único que de alguna manera lo hizo funcionar fue mover el nodo mucho más abajo en la cadena, aproximadamente 10 nodos después. Luego intenté moverlo solo 5 nodos hacia abajo, y 1 nodo hacia atrás, y volvió a dejar de funcionar. Entonces parece que la posición en la cadena importa, lo que no entiendo para un nodo que simplemente lee una tabla.

Esto se convierte en un fallo real cuando un nodo posterior hace referencia al nodo por nombre con $('Get node B').all(). Como ese nodo nunca se ejecutó, la referencia no devuelve nada, mientras que el nodo Get hermano en la misma entrada funciona perfectamente.
¿Por qué un nodo Get paralelo se reusaría a ejecutarse mientras su hermano con la misma entrada funciona bien, y por qué solo moverlo más abajo en la cadena lo arregla?

¿Cuál es el mensaje de error (si lo hay)?
No hay error en el nodo Get en sí, simplemente no se ejecuta. El nodo posterior falla porque el nodo referenciado nunca se ejecutó.

Comparte el resultado devuelto por el último nodo

(Get node A: devuelve sus filas como se esperaba. Get node B, misma entrada: sin ejecución, sin resultado.)

Información sobre tu configuración de n8n

  • Versión de n8n: 2.25.7
  • Base de datos (predeterminada: SQLite): n8n predeterminada
  • Ejecutando n8n por medio de (Docker, npm, n8n cloud, aplicación de escritorio): n8n cloud
  • Sistema operativo: n8n cloud

@pohgen no es el nodo, es el orden de ejecución de ramas de n8n. Desde v1.0, n8n ejecuta las ramas paralelas una a la vez, de arriba a abajo según la posición en el lienzo, terminando una completamente antes de pasar a la siguiente.

Validate Input se divide en tres Gets. n8n ejecuta el de arriba, luego el del medio (Get Routing Rows) y todo su flujo descendente, incluyendo el nodo que hace $(‘Get Email Aliases’).all(), y solo después la rama de abajo. Así que esa referencia se ejecuta antes de que Get Email Aliases haya corrido, devuelve vacío, y el nodo parece que nunca se ejecutó. Moverlo ~10 nodos hacia abajo lo pone en la rama principal antes de la referencia, así que se ejecuta primero, ese es el efecto de posición.

Solución: no hagas referencias entre ramas paralelas. Pon Get Email Aliases en línea antes de donde lo uses, o añade un nodo Merge para que todas las ramas terminen antes de que algo más aguas abajo se ejecute, lo que la documentación de n8n recomienda para esto.

Hola @pohgen

Para solucionar esto correctamente y mantener tu flujo de trabajo limpio, debes indicarle explícitamente a n8n que los datos de las ramas paralelas son necesarios uniéndolas de nuevo.

  1. Añade un nodo Merge después de tus ramas paralelas.
  2. Conecta la salida de tu rama “funcional” (p. ej., Get All Candidate Templates) a la primera entrada del nodo Merge.
  3. Conecta la salida de tu rama “con errores” (p. ej., Get Routing Rows) a la segunda entrada del nodo Merge.
  4. Establece el modo del nodo Merge en “Esperar a que lleguen todas las entradas” (o “Combinar” si estás fusionando datos).
  5. Coloca tu nodo descendente después de este nodo Merge.

Al hacer esto, creas una conexión física que “protege” la rama de ser podada, asegurando que el motor la reconozca como una parte necesaria de la ejecución.

¿Te ayuda esto?