>   // Just curious, do we still need 0-length timeout if put cleanup inside promise ?

I think we don't; the goal of setTimeout is to "break" the call stack, I think Promises do the same