Как заставить setTimeout задержать код после него?
function sleep(ms) { 
 return new Promise(resolve => setTimeout(resolve, ms)); 
}
// вызывайте его внутри async функции так:
async function delayedGreeting() { 
 console.log("Hello"); 
 await sleep(2000); 
 console.log("World!"); 
 await sleep(2000); 
 console.log("Goodbye!"); 
}
//В обычных функциях так:
sleep(2000).then(() => { console.log("World!"); });
Ну так поместите второй лог внутрь таймаута. 

Но вы, наверное, хотите другое. Гуглите async await.