TCO needs to be supported by the runtime, but what I'm talking about only needs to be supported by the Promise implementation, so in this case it's just a sloppy library we are talking about.
> When you create unbounded recursion, you leak memory
This is only true in weird universes, like that of JavaScript.
It's actually really easy to end up with a really long chain of tail recursive calls - for example when processing streams or when doing functional programming in general.
Having to explain why this is a huge problem is one reason for why I feel that JavaScript's ecosystem is so broken. In case you're wondering, given Promise's surprises, I actually think going for the callback hell is saner, because in such cases you just pass a callback around without surprises.