Defrag a HEAP by creating clustered index and immediately dropping it
How do I make the DROP wait for the CREATE CLUSTERED to finish?


You don't, it already does. The statements are sequential, i.e. synchronous, one after the other.

What is heap storage? Paul Randal explains

So what you really have is just a stack of paper thrown all over the desk, almost literally. Your operation neatly numbers the pages on the bottom right corner, collates the pages in sequential order, binds them, and then... unbinds and throws them back onto the desk again in a heap.  The total achievement is near zero.  Sure you will regain some usage from tidying up and removing forwarded pages, the data pages may be a tad bit more compact.  Other than that, it's just as messy as you started.