JavaScript hoạt động không đồng bộ như thế nào?
Khi sử dụng hàm JavaScript Ví dụsetTimeout(myFunction, 3000); function myFunction() { Tự mình thử » Trong ví dụ trên,
3000 là số mili giây trước khi hết thời gian, do đó, Ghi chúKhi bạn chuyển một hàm làm đối số, hãy nhớ không sử dụng dấu ngoặc đơn Đúng. setTimeout(myFunction, 3000); Sai. setTimeout(myFunction(), 3000); Thay vì chuyển tên của một hàm làm đối số cho một hàm khác, thay vào đó, bạn luôn có thể chuyển toàn bộ hàm Ví dụsetTimeout(function() { myFunction("Anh yeu em. "); }, 3000); function myFunction(value) { Tự mình thử » Trong ví dụ trên, 3000 là số mili giây trước khi hết thời gian, do đó, Đang chờ khoảng thời gianKhi sử dụng hàm JavaScript const getPromise = () => Promise.resolve('My return value');const myFunction = () => {10, bạn có thể chỉ định hàm gọi lại sẽ được thực thi cho mỗi khoảng thời gian Ví dụsetInterval(myFunction, 1000); function myFunction() { Tự mình thử » Trong ví dụ trên,
const getPromise = () => Promise.resolve('My return value');const myFunction = () => {10 như một đối số 1000 là số mili giây giữa các khoảng thời gian, do đó, Các lựa chọn thay thế gọi lạiVới lập trình không đồng bộ, các chương trình JavaScript có thể bắt đầu các tác vụ chạy dài và tiếp tục chạy song song các tác vụ khác Tuy nhiên, các chương trình không đồng bộ rất khó viết và khó gỡ lỗi Do đó, hầu hết các phương thức JavaScript không đồng bộ hiện đại không sử dụng lệnh gọi lại. Thay vào đó, trong JavaScript, lập trình không đồng bộ được giải quyết bằng Promises Công cụ JavaScript là một luồng đơn và sử dụng một vòng lặp sự kiện. Nói một cách đơn giản, điều này có nghĩa là bất kỳ câu lệnh nào bạn chạy sẽ được thực hiện lần lượt trong một quy trình. Để tránh chặn cuộc gọi, có một số kỹ thuật mà JavaScript sử dụng để tránh phải chờ đợi trong khi tính toán. Đây là các chức năng không đồng bộ Bạn có thể đọc thêm về vòng lặp sự kiện tại đây vì chủ đề quá sâu để trình bày trong bài đăng này JavaScript cung cấp ba phương thức xử lý mã không đồng bộ. gọi lại, cho phép bạn cung cấp các chức năng để gọi sau khi phương thức không đồng bộ chạy xong; gọi lạiPhương pháp ban đầu để xử lý tính không đồng bộ. Gọi lại cho phép bạn cung cấp một chức năng sẽ được thực thi sau khi mã không đồng bộ kết thúc. Trong ví dụ bên dưới, const getPromise = () => Promise.resolve('My return value');const myFunction = () => {6 lấy một hàm làm đối số và sẽ gọi hàm đó khi hoàn thành Phương pháp này, chuyển qua lại các hàm, có thể trở nên rất khó hiểu nếu bạn cần xâu chuỗi một số lệnh gọi này lại với nhau. Cuộc gọi lại sẽ cần được chuyển xuống chuỗi thực thi để được gọi ở cuối quy trình cuối cùng const functionWithACallback = (callback) => { lời hứaMột trong những vấn đề chính với các cuộc gọi lại là, khi xâu chuỗi một số lệnh gọi hàm lại với nhau, việc theo dõi luồng thực thi có thể trở nên khó khăn hơn. Các lời hứa nhằm mục đích giải quyết vấn đề này bằng cách cho phép bạn kết hợp các lời hứa với nhau bằng cú pháp const getPromise = () => Promise.resolve('My return value');const myFunction = () => {7. Ví dụ bên dưới hoạt động giống như ví dụ gọi lại, nhưng dễ theo dõi hơn nhiều. đợi cho đến khi const getPromise = () => Promise.resolve('My return value');const myFunction = () => {8 hoàn thành rồi gọi hàm chứa const getPromise = () => Promise.resolve('My return value');const myFunction = () => {9 Xử lý lỗi với lời hứa cũng ít phức tạp hơn. Thay vì gọi cuộc gọi lại với một đối tượng lỗi, các lời hứa cung cấp một trình bao bọc const getPromise = () => Promise.resolve('My return value');const myFunction = () => {0 để giúp quản lý các trạng thái lỗi. Bên dưới, khối const getPromise = () => Promise.resolve('My return value');const myFunction = () => {1 sẽ được thực thi nếu xảy ra lỗi trong bất kỳ lời hứa nào ở trên nó const getPromise = () => Promise.resolve('My return value');const myFunction = () => { Không đồng bộ/Đang chờTrong các phiên bản JavaScript gần đây hơn, các từ khóa const getPromise = () => Promise.resolve('My return value');const myFunction = () => {2 và const getPromise = () => Promise.resolve('My return value');const myFunction = () => {0 đã được thêm vào. Điều này cung cấp một phương pháp viết lời hứa rõ ràng hơn và cho phép người dùng kiểm soát nhiều hơn đối với thứ tự thực hiện. Ví dụ dưới đây giống với ví dụ về lời hứa về chức năng, nhưng được viết bằng từ khóa const getPromise = () => Promise.resolve('My return value');const myFunction = () => {2 và const getPromise = () => Promise.resolve('My return value');const myFunction = () => {0 |