I love functional languages like Elixir + Elm that give you a pipe syntax for control flow:
data |> first_transformation |> second_transformation |> etc
first_transformation(data) .then(second_transformation) .then(third_transformation) .catch(handle_errors_from_the_whole_chain)
The MDN docs on Control flow and error handling suggest that promises are mostly for async/deferred operations. Is it normal to use promises merely as a mechanism for control flow and organization? Is it a horrible idea for some reason?