Avatar
1
Trần Quốc Đạt Beginner
Promise có bất đồng bộ không?
Hello anh! Em có đọc qua Bài viết về Single thread. Bài chia sẻ rất hay, nó làm em thay đổi cả suy nghĩ trước giờ về Promise. <p> </p> <p> Trước giờ em cứ nghĩ Promise nó rất thần kì, nó sẽ tự động đưa code bên trong constructor's callback ra một "stack nào đó", đợi đến khi main stack trống, event loop push ngược lại vào main stack như setTimeout, setInterval. hay nói đơn giản là biến code đồng bộ thành bất đồng bộ. </p> <p> </p> <p> Ví dụ về Promise vẫn có thể xảy ra tình trạng blocking của anh rất hay, nó làm em nhận ra trước giờ mình đã sai về Promise. Nhưng em vẫn còn 1 điều thắc mắc: Promise có phải chỉ là một kiểu dữ liệu "wrapper" cho các service bất đồng bộ khác như WebApi, network,... bla bla và nó được viết thuần JS 100% (có nghĩa Promise vẫn là đồng bộ) không ạ? Lý do thì em nghĩ là để thay đổi cách viết bất đồng bộ bằng callback ngày xưa? </p> <pre> function runWithPromise() { let x = 0 return new Promise(res =&gt; { while (x++ &lt; 600_000_000); console.log(x) return res(x) }) } async function runWithAsync() { let x = 0 while (x++ &lt; 600_000_000); console.log(x) return x } runWithAsync() runWithPromise() console.log('Finished') </pre> <p> </p> <img class="alignnone size-full wp-image-1688" src="https://stackask.com/wp-content/uploads/2021/09/inbound6375322122086767929.jpg" alt="" />
Answer