While the forEach method will work in some contexts, note that if you’re doing something like firing a workflow only when the previous iteration’s workflow is truly complete, you can use List Shifter’s iterate function.
(The issue being that the “delay” parameter will never be right for all devices in all situations. It will be too short for some devices and longer-than-need-be for others.)
This being said, Bubble in-page workflows themselves are either poorly coded, bugged, or intentionally slowed (which wouldn’t make sense, but is a possibility — is it because of logging? Why do we even need logging for workflows that don’t touch the database?) and even a trivial (or even EMPTY) Bubble workflow takes a measurable time to complete (“why?” we wonder - I guess it’s because logging? ).
As a result, iterating over workflows takes longer than it “should”.
At least there are iteration options available. When I started with Bubble there were none/zero/zip.
(Though it’s literally, actually inexplicable that a native/vanilla solution doesn’t exist. It would be excusable if Bubble were truly an array-oriented environment, but it’s not as it’s missing some basic features there.)