Iterator
Descripción
Sección titulada «Descripción»El modulo Iterator recibe un array de datos y ejecuta los nodos siguientes del workflow para cada elemento del array de forma paralela. Cada elemento se procesa de forma independiente con sus propios metadatos (_meta_) que incluyen el índice actual, el total de elementos y un identificador único de ejecución. Si los datos de entrada no son un array pero son un objeto con claves numericas, se convierte automáticamente a array. Es el nodo fundamental para procesamiento por lotes en workflows, y debe combinarse con un nodo de merge (mergeResults, mergeIterator) para recombinar los resultados.
Configuración
Sección titulada «Configuración»Parámetros
Sección titulada «Parámetros»| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| expression | text | No | Expresion que devuelve el array a iterar. Por defecto se usa data directamente. |
{ "_iterating": true, "batch": [ { "_meta_": { "workflowRunId": "1679561234567", "totalChunks": 3, "currentChunk": 0, "currentIndex": 0 }, "data": { "nombre": "Item 1" }, "nextModule": "siguiente_modulo" }, { "_meta_": { "workflowRunId": "1679561234567", "totalChunks": 3, "currentChunk": 1, "currentIndex": 1 }, "data": { "nombre": "Item 2" }, "nextModule": "siguiente_modulo" } ], "data": { "summary": [ { "poscurrent": 0, "status": "pending", "record": { "nombre": "Item 1" } }, { "poscurrent": 1, "status": "pending", "record": { "nombre": "Item 2" } } ], "workflowRunId": "1679561234567" }}Ejemplo de Uso
Sección titulada «Ejemplo de Uso»Caso básico
Sección titulada «Caso básico»{ "label": "Iterator", "expression": ""}- Los datos de entrada deben ser un array. Si se recibe un objeto con claves numericas (ej:
{0: "a", 1: "b"}), se convierte automáticamente a array. - Si los datos no son un array ni un objeto convertible, se retorna un error.
- Cada elemento del array se pasa individualmente como
dataal siguiente nodo. - El
workflowRunIdse genera a partir de la marca de tiempo actual (Date.now()). - Retorna
_iterating: truecon un arraybatchpara que el motor ejecute cada elemento en paralelo. - El
nextModuledel batch esnulla nivel raiz para evitar continuación automática; cada elemento del batch contiene su propionextModule. - El campo
expressionpermite especificar una expresion personalizada para obtener el array a iterar, aunque por defecto se usadata. - Concurrencia: los items del batch se ejecutan concurrentemente hasta
maxConcurrent(por defecto: 5). Cada item sigue la cadena completa de modulos de forma independiente hasta llegar a un nodo merge onull. - Seguimiento de fuente (source): cuando la cadena de un item llama a un modulo descendente (ej.
mergeMultiple), el motor pasasourceen el config identificando que modulo predecesor envío los datos. Esto permite a los nodos merge distinguir correctamente las entradas de distintas ramas. - Items absorbidos por nodos merge: si todos los items del batch llegan a un nodo
mergeResultsomergeMultipley son absorbidos (es decir, el merge aun esta recolectando), el iterator termina normalmente sin emitir error. El resumen reporta correctamentesucceeded: Nen vez de tratar los items absorbidos como fallos. - Badge de progreso en el canvas: cada nodo de la cadena del batch muestra
N/M(item actual / total de items) en tiempo real en el canvas mientras el batch esta en ejecución. - El cuerpo del bucle se ve en el editor: un contorno marca qué nodos se ejecutan por cada item y una línea discontinua une el iterador con el nodo que lo cierra. Ojo con un detalle: el motor cierra en el primer
MergeIteratorde la cadena, así que encadenar varios merges no cierra un nivel por cada uno. Ver Ver los bucles en el lienzo.
Nodos Relacionados
Sección titulada «Nodos Relacionados»- MergeResults - recombina los resultados de la iteración
- MergeIterator - merge simplificado de iteración
- Repeater - genera N repeticiones en lugar de iterar un array
- Merge - merge básico de chunks
- Compatibilidad de nodos con el Iterador - qué nodos funcionan dentro de una iteración y cuáles no