Control Flow Nodes
Control flow nodes determine how data moves through your workflow. Use them to branch, loop, run tasks in parallel, pause execution, handle errors, and compose workflows from reusable subflows.
All Control Flow Nodes
Evaluate a condition and route data to the True or False branch. Supports expressions, comparisons, and boolean logic.
Multi-way branching based on a value. Define named cases with match conditions and an optional default fallthrough branch.
Iterate over an array and execute downstream nodes once per item. Access the current item, index, and total count in expressions.
Execute multiple downstream branches concurrently. All branches run simultaneously and results are collected when every branch completes.
Pause workflow execution for a specified duration. Configure delays in seconds, minutes, or hours.
Wrap nodes in error handling. The Try branch executes normally; if any node throws an error, execution jumps to the Catch branch. An optional Finally branch runs regardless of success or failure.
Execute another workflow as a step within the current workflow. Enables modular, reusable workflow design with input/output data mapping.
If/Else
The If/Else node evaluates a condition expression and directs data down the True or False output. You can use any expression that resolves to a boolean value.
// Condition expression example
{{ $json.status === "active" && $json.score > 80 }}Both branches receive the full input data. Downstream nodes on each branch only execute when their branch is taken.
Switch
The Switch node provides multi-way branching. Define a value expression and one or more cases. Each case has a name, a match value, and its own output. An optional default branch handles unmatched values.
| Property | Description |
|---|---|
| Value | The expression to evaluate (e.g. {{ $json.region }}) |
| Cases | Named branches with match values (e.g. us-east, eu-west) |
| Default | Optional fallthrough branch for unmatched values |
Loop
The Loop node iterates over an array and executes downstream nodes once for each item. Inside the loop body, you can access:
{{ $json.item }}-- the current array element{{ $json.index }}-- the zero-based iteration index{{ $json.total }}-- the total number of items
Parallel
The Parallel node splits execution into concurrent branches. All branches start simultaneously and the node waits for every branch to complete before merging results and continuing the workflow.
Execution limits
Delay
The Delay node pauses execution for a configurable duration. Use it to add wait times between API calls (rate limiting), schedule follow-up actions, or implement polling patterns.
Try/Catch
The Try/Catch node wraps a group of nodes in error handling. If any node in the Try branch throws an error, execution immediately jumps to the Catch branch. The Catch branch receives the error details. An optional Finally branch always executes, regardless of whether an error occurred.
| Branch | Executes When |
|---|---|
| Try | Always -- contains the primary logic |
| Catch | Only when an error occurs in the Try branch |
| Finally | Always -- runs after Try or Catch completes |
Subflow
The Subflow node executes another workflow as a step within the current workflow. This enables modular workflow design -- build reusable logic once and invoke it from multiple parent workflows.
Features
- Searchable selector -- browse and search all available workflows in your workspace.
- Input mapping -- map data from the parent workflow into the subflow's trigger input.
- Output mapping -- extract data from the subflow's final output back into the parent workflow.
- Recursion prevention -- NodeLoom detects circular subflow references and prevents infinite loops.
- Depth limit -- subflows can be nested up to 10 levels deep. Exceeding this limit causes the execution to fail with a clear error message.
- Timeout -- configurable execution timeout prevents runaway subflows from blocking the parent workflow.
Recursion depth