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