Here is a use-case: you have some class that offers a number of async methods. Each of those methods works on some shared state, so you want prevent clients from calling one of the other methods before the current operation is complete. Rather than trusting your clients to be disciplined enough to await every promise returned by your methods, you can queue the methods calls yourself. This TypeScript method decorator even does it for you.

Of course, by the time a queued method call is actually executed, the pre-conditions under which it was called may have changed, but that’s your caller’s problem for starting new operations without waiting for old ones to complete first.