I'm not entirely clear from your posts what is actually happening vs. what you expect to happen. It's much easier to share project files so they can be run directly and adjusted if necessary.
It's normal that if FuncA calls FuncB, then FuncB will complete and return before FuncA does. The exception to this is if you add 'Wait'. It's very similar to using setTimeout
in Javascript, and running the rest of the function in the callback to that method. This means that the function returns early with the default return value, all other events run to completion, and then at some point later on the timeout happens and the rest of the code runs. By this point it's too late to return a value from the function: it's already finished. Therefore the return value will be ignored.
This is, again, normal behavior in computing: as it stands Construct functions are synchronous, but anything involving 'Wait' essentially makes the events asynchronous. In general calling an asynchronous function from a synchronous one will mix up the execution order, as the synchronous function will not wait for the asynchronous one to complete. This is not specific to Construct and is typical of programming in general.
It's common that people run in to a problem and then they immediately blame Construct. I would discourage you from doing this - not only is it somewhat tiring, it's also not the best way to investigate and diagnose a problem and will probably just send you on a wild goose chase which will only increase your frustration. A better approach is to basically take a debugging approach. For example you could add console logs frequently through the events, with messages like "Starting funcA", "Finishing funcA", "Step1", "Step2" etc. Then you can easily see in the console the specific order that everything ran in. This then helps figure out where things are diverging from what you expect, and helps you hone in on why. Chances are it's working as designed (but remember events are a pretty different paradigm to traditional programming languages, so in some cases the intended design may not be identical to other typical languages). Even if you become convinced it's a bug, you then have a project ideally set up to either share on the forum to ask about why it's working that way, or post to the bug tracker as a project demonstrating what you believe to be a bug.
On the other hand, if you just keep making random changes to an event sheet, and always want to blame something other than the logic of your events, then yeah, you'll probably have a hard time making progress!