@@ -75,23 +75,30 @@ protected ForExecutor(ForExecutorBuilder builder) {
7575 @ Override
7676 protected CompletableFuture <WorkflowModel > internalExecute (
7777 WorkflowContext workflow , TaskContext taskContext ) {
78- Iterator <?> iter = collectionExpr .apply (workflow , taskContext , taskContext .input ()).iterator ();
79- int i = 0 ;
80- CompletableFuture <WorkflowModel > future =
81- CompletableFuture .completedFuture (taskContext .input ());
82- while (iter .hasNext ()) {
78+ return buildLoopFuture (
79+ workflow ,
80+ taskContext ,
81+ taskContext .input (),
82+ collectionExpr .apply (workflow , taskContext , taskContext .input ()).iterator (),
83+ -1 );
84+ }
85+
86+ private CompletableFuture <WorkflowModel > buildLoopFuture (
87+ WorkflowContext workflow ,
88+ TaskContext taskContext ,
89+ WorkflowModel input ,
90+ Iterator <?> iter ,
91+ int index ) {
92+ final int newIndex = index + 1 ;
93+ if (iter .hasNext ()) {
8394 taskContext .variables ().put (task .getFor ().getEach (), iter .next ());
84- taskContext .variables ().put (task .getFor ().getAt (), i ++ );
95+ taskContext .variables ().put (task .getFor ().getAt (), newIndex );
8596 if (whileExpr .map (w -> w .test (workflow , taskContext , taskContext .input ())).orElse (true )) {
86- future =
87- future .thenCompose (
88- input ->
89- TaskExecutorHelper .processTaskList (
90- taskExecutor , workflow , Optional .of (taskContext ), input ));
91- } else {
92- break ;
97+ return TaskExecutorHelper .processTaskList (
98+ taskExecutor , workflow , Optional .of (taskContext ), input )
99+ .thenCompose (output -> buildLoopFuture (workflow , taskContext , output , iter , newIndex ));
93100 }
94101 }
95- return future ;
102+ return CompletableFuture . completedFuture ( input ) ;
96103 }
97104}
0 commit comments