n8n子流程中有循环遍历,如何让主流程等待所有遍历结果完成后再返回结果?默认似乎每个遍历都会响应一个...
Создано: 7 марта 2025 г.
Создано: 7 марта 2025 г.
n8n子流程中有循环遍历,如何让主流程等待所有遍历结果完成后再返回结果?默认似乎每个遍历都会响应一个结果?
在 n8n 中,如果你在子流程里用循环(例如 Split In Batches 或类似方式)来遍历多个数据,默认情况下,子流程可能会在循环中每处理一条数据就返回一次结果,导致主流程“提早”拿到了一批批的输出。如果你希望主流程只在所有循环处理完成后再得到一个合并后的最终结果,就需要让子流程“只在最后一步”输出一次结果,或者在主流程中把所有子流程的输出合并起来。
下面给出几种常见思路,供你参考:
基本思路
典型做法
this.getWorkflowStaticData('node')
来做“流程级别”的数据存储。allResults
)输出给主流程。子流程中看上去会是类似:
text(Start) --> [Split In Batches] --> [Do Something] --> [Function: push to array] ↑ | └-----------------(No More Batches?)---------------------┘ ↓ [Function: return final array] --> (End)
这样在子流程里只会最终输出 1 条包含所有结果的 item,主流程那边就只会拿到一次结果。
有时我们可能确实想在主流程里一次性汇总多条输出,而不是改动子流程。那可以:
但是,这种模式下,子流程本身还是会“执行多次”,每一条输入 item 都产生一次输出;只不过主流程可以用一个合并步骤等待全部完成以后再继续下一步逻辑。
Execute Workflow 节点中有一个运行模式的选项:
如果你的需求是“把一批数据打包给子流程处理,然后一次性返回”,那么可以在主流程的 Execute Workflow 节点选择 “Run Once for All Items”,这样就不用主流程自己去做汇总,子流程可以自然地在内部做循环并最终只输出一次。
关键要点是:
这样就可以实现“等待所有遍历结果完成后再返回”,而不是在每次迭代都响应一条结果给主流程。