Basically I want to be able to wrap any command in a $.holdTillFinished() method that will not allow execution to continue until the specified method/jquery animation is finished executing.
I suspect that this may be difficult or even impossible in javascript, but I’m hoping someone will know.
I don’t want to hear about how I can pass a callback into an animation to have it run oncomplete, or anything else like that.
I really want to know if such a thing is possible and how to go about it.
If that isn’t going to happen if anyone knows of a nice queue plugin that is capable of queuing both user defined methods and animations, that would be cool too. What I really want is a way to delay execution though.(while still allowing animations to function)
Your suspicion is correct. Methods like animations, user input loops and ‘async=true’ XMLHttpRequests must return control to the browser in order to proceed, and the browser can’t get back control until every nesting level of function call has returned. That means all your code, including the function that called ‘holdTillFinished()’ would have to unwind: therefore ‘holdTillFinished()’ is impossible.
Other languages have flow-control features that allow you to effectively execute an asynchronous process as one that appears to the caller to be synchronous, and similarly vice-versa. The best-known are threads and continuations. JavaScript does not possess these facilities, so the best you can do is timeouts and callbacks.
(Defining a callback as an inline function to gain access to the enclosing function’s variables in a closure does at least take some of the pain out of it; some other languages have to start wrapping every bit of enclosing state in an object’s properties to achieve this.)