Promises also solve this problem. If you immediately resolve a promise it isn't actually resolved until the next event loop "tick":
new Promise(resolve => resolve("resolved!")).then(result => console.log(result));
console.log("next statement");
Prints "next statement" then "resolved!".