Thứ tự chạy các lệnh trong Javascript Event loop

Javascript được thực thi ở 1 thread duy nhất (single-threaded), Javascript dùng Call stack để lưu các gọi các hàm lồng nhau, nếu nhiều hàm cùng cấp được gọi thì làm sao để biết trước được cái nào được gọi trước trong khi thực thi lệnh của Javascript, khi ấy khái niệm Task Queue của Javascript được sử dụng.
Task queue sẽ lấy các lệnh trong đồng bộ trước để thực thi (sync task), tiếp đến là các Promise và micro-task callback và kế là các lệnh bất đồng bộ (async task).
Bài tập theo các bạn thì kết quả xuất ra console theo thứ tự là gì ?

setTimeout(()=>console.log(1), 0);
Promise.resolve().then(v=>console.log(2));
console.log(3);

Xem các tài liệu sau để có câu trả lời hoặc chạy đoạn code trên nếu muốn thấy kết quả