в setTimeout коллбэк который ты туда ложишь - он макро задача, в then коллбэк - микро задача
Сам timeout - макро задача.- сам вызов setTimeout - синхронный, а вот его коллбэк - он потом становится макротаской
Promise.resolve().then(setTimeout(() => test(4) /* MS1 */, 1000))
вот тут он будет в самый раз, потому что например в это примере нельзя установить высоту, и тут этой приём в самый раз подходит который я тут в ответе посоветовал
ладно уж удалять ответ не буду, пусть будет отметкой той - как набирался опыта, в проверке своих знаний, со своим тупизмом