ProtoFlux:Async For: Difference between revisions

From Resonite Wiki
AsyncCall not SyncResumption
refactor--make more concise and clear and I don't think we should have broken examples
Line 17: Line 17:
|}}
|}}


ASync For is a protoflux node that will do a bunch of async tasks in order in an Async context, waiting for each task to be done before moving to the next one. This is useful if you want to do a bunch of [[ProtoFlux:GET String|GET String]] requests but you need to wait for the previous one to be done before doing the next, for a specified number of times. This does not behave the same as using a [[ProtoFlux:Start ASync Task|Start ASync Task]] on every [[ProtoFlux:For|For loop]] iteration or even before the [[ProtoFlux:For|For loop]] using a [[ProtoFlux:Start ASync Task|Start ASync Task]].
The '''Async For''' node is the analogue to the [[ProtoFlux:For|For]] node for an [[async context]].


== Inputs ==
== Inputs ==
Line 23: Line 23:
=== * ([[Impulses#ASync|IAsyncOperation]]) ===
=== * ([[Impulses#ASync|IAsyncOperation]]) ===


Start the execution of this node.
Begin the for loop.


=== Count ([[Type:Int|int]]) ===
=== Count ([[Type:Int|int]]) ===


How many times to execute LoopIteration ([[Impulses#ASync|AsyncCall]])
How many times to trigger <code>LoopIteration</code>.


=== Reverse ([[Type:Bool|bool]]) ===
=== Reverse ([[Type:Bool|bool]]) ===


Whether to start at Count ([[Type:Int|int]]) and go backwards.
If <code>True</code>, the <code>Iteration</code> output will start at <code>Count - 1</code> and go down towards <code>0</code>.


== Outputs ==
== Outputs ==
Line 37: Line 37:
=== LoopStart ([[Impulses#ASync|AsyncCall]]) ===
=== LoopStart ([[Impulses#ASync|AsyncCall]]) ===


Fires after * ([[Impulses#ASync|IAsyncOperation]]) is called and before any iterations or checks have been done.
Fires after <code>*</code> is pulsed and before any iterations are done. Will be pulsed even if <code>Count < 1</code>.


=== LoopIteration ([[Impulses#ASync|AsyncCall]]) ===
=== LoopIteration ([[Impulses#ASync|AsyncCall]]) ===


Fires while the loop is running and after the previous LoopIteration ([[Impulses#ASync|AsyncCall]]) or LoopStart ([[Impulses#ASync|AsyncCall]]) has finished.
Fires for each iteration of the loop. This impulse is triggered <count>Count</code> amount of times and the next iteration will only be fired once the current iteration's [[context]] is finished.


=== LoopEnd ([[Impulses|Continuation]]) ===
=== LoopEnd ([[Impulses|Continuation]]) ===


Fires once the loop has finished all LoopIteration ([[Impulses#ASync|AsyncCall]]) in order.
Fires after the final <code>LoopIteration</code> completes execution.


=== Iteration ([[Type:Int|int]]) ===
=== Iteration ([[Type:Int|int]]) ===


The current iteration of the loop.
For each <code>LoopIteration</code>, this output is set to be the index of the iteration for said iteration's context. By default, this will start at <code>0</code> and increment until <code>Count - 1</code> unless <code>Reverse</code> is <code>True</code>.


== Examples ==
== Examples ==
<gallery widths=480px heights=480px>
File:Protoflux_example_ASync_For.webp|ASync For being used to do X cloud variable reads in order.
File:Protoflux_example_ASync_For2.webp|ASync For being used to do X web requests in order.
</gallery>


[[Category:ProtoFlux:Flow:Async]]
[[Category:ProtoFlux:Flow:Async]]

Revision as of 21:23, 12 December 2024

Async For
*
LoopStart
Count
LoopIteration
Reverse
LoopEnd
Iteration
Async

The Async For node is the analogue to the For node for an async context.

Inputs

* (IAsyncOperation)

Begin the for loop.

Count (int)

How many times to trigger LoopIteration.

Reverse (bool)

If True, the Iteration output will start at Count - 1 and go down towards 0.

Outputs

LoopStart (AsyncCall)

Fires after * is pulsed and before any iterations are done. Will be pulsed even if Count < 1.

LoopIteration (AsyncCall)

Fires for each iteration of the loop. This impulse is triggered <count>Count amount of times and the next iteration will only be fired once the current iteration's context is finished.

LoopEnd (Continuation)

Fires after the final LoopIteration completes execution.

Iteration (int)

For each LoopIteration, this output is set to be the index of the iteration for said iteration's context. By default, this will start at 0 and increment until Count - 1 unless Reverse is True.

Examples