Hàm ngủ - Sleep Function
Đề xuất sai, luồng JavaScript không thể tạm dừng, nhưng có thể tạo hiệu ứng tương tự giấc ngủ bằng cách sử dụng các phương thức bất đồng bộ.
Cách triển khai
Sử dụng hàm gọi lại (Callback Function)
Sử dụng Promise
- Ưu điểm: Phương pháp này thực tế sử dụng
setTimeout
, không tạo ra tình trạng chặn tiến trình, không gây tải nặng và không ảnh hưởng đến hiệu suất. - Nhược điểm: Mặc dù không như việc lồng nhau nhiều lớp như
callback
, nhưng vẫn không được trực quan và khi cần dừng thực hiện trong quá trình (hoặc trả về giá trị sai giữa chừng), vẫn phải kiểm tra và thoát từng lớp, rất phiền phức và không thân thiện, và không phải là bất đồng bộ hoàn toàn, vẫn cảm thấy lạ lẫm.
Sử dụng Generator
- Ưu điểm: Tương tự như Promise, nhưng mã code trở nên rất đơn giản và sạch sẽ, không có
then
khó nhìn và khó chịu. - Nhược điểm: Nhược điểm là phải gọi
next
mỗi lần, mặc dù có thể giải quyết bằngco
(gói bên thứ ba), nhưng vẫn tạo thêm một lớp không tốt và không đẹp mắt, và lỗi vẫn phải được xử lý theo quy tắc củaco
, không thoải mái.
Sử dụng Async/Await
- Ưu điểm: Tương tự như Promise và Generator, Async/Await có thể coi là cú pháp đường dẫn của Generator, Async và Await so với
*
vàyield
có ý nghĩa ngữ nghĩa hơn, ngoài ra các hàm đều là phẳng, không có lồng nhau thừa thãi, mã code trở nên sạch sẽ và dễ đọc hơn. - Nhược điểm: Cú pháp ES7 này có vấn đề về tương thích, nhưng không phải là vấn đề khi sử dụng Babel để tương thích.