Lời hứa javascript là đồng bộ hay không đồng bộ?

Có nhiều cách khác nhau để xử lý các hoạt động trong NodeJS hoặc JavaScript. Đối với thực thi không đồng bộ, các quy trình khác nhau chạy đồng thời và được xử lý khi có kết quả của từng quy trình. Có nhiều cách khác nhau để xử lý mã không đồng bộ trong NodeJS hoặc trong JavaScript, đó là

  • gọi lại
  • lời hứa
  • Không đồng bộ/Đang chờ

1. lời hứa

Một lời hứa trong NodeJS tương tự như một lời hứa trong cuộc sống thực. Đó là một sự đảm bảo rằng một cái gì đó sẽ được thực hiện. Promise được sử dụng để theo dõi xem sự kiện không đồng bộ đã được thực thi hay chưa và xác định điều gì sẽ xảy ra sau khi sự kiện xảy ra. Nó là một đối tượng có 3 trạng thái cụ thể là

  • Chưa giải quyết. Trạng thái ban đầu, trước khi sự kiện xảy ra
  • giải quyết. Sau khi hoạt động hoàn tất thành công
  • Phế phẩm. Nếu hoạt động có lỗi trong khi thực hiện, lời hứa sẽ thất bại

Thí dụ. Trong khi yêu cầu dữ liệu từ máy chủ cơ sở dữ liệu, Lời hứa ở trạng thái chờ xử lý cho đến khi nhận được dữ liệu. Nếu dữ liệu được nhận thành công thì Promise ở trạng thái được giải quyết và nếu dữ liệu không thể nhận thành công thì Promise ở trạng thái bị từ chối.  

Xử lý lỗi của lời hứa. Đối với một lời hứa được giải quyết thành công, chúng tôi sử dụng. then() và đối với lời hứa bị từ chối, chúng tôi sử dụng. phương pháp bắt (). Để chạy mã sau khi lời hứa đã được xử lý bằng cách sử dụng. thì() hoặc. phương thức catch(), chúng ta có thể. phương thức cuối cùng(). Mã bên trong. phương thức cuối cùng () chạy một lần bất kể trạng thái của lời hứa

Thí dụ

Javascript




Ảnh của Aleks Shineleva

Khi yêu cầu cơ sở dữ liệu hoàn tất, kết quả (và bất kỳ mã lồng nhau nào khác) được gửi đến hàng đợi và sau đó được xử lý thông qua vòng lặp sự kiện

Trong sơ đồ ở đây, bạn có thể thấy điều này khác với mã đồng bộ như thế nào. Chức năng C, cùng với E, F và G đều được gửi đến trình duyệt, hàng đợi và vòng lặp sự kiện

Nếu bạn muốn có một lời giải thích rõ ràng, tuyệt vời về quy trình này, hãy xem phần minh họa này của Philip Roberts

Trong khi đây là một giải pháp tuyệt vời, nó để lại một cái gì đó được mong muốn. Vì bạn không thể dự đoán chính xác khi nào hàm C sẽ giải quyết, nên bạn phải lồng tất cả các hàm phụ thuộc vào trong đó. Điều này trở nên lộn xộn nhanh chóng và dẫn đến địa ngục gọi lại khét tiếng mà không ai muốn giải quyết. Chính môi trường này đã truyền cảm hứng cho lời hứa

lời hứa

Để đối phó với địa ngục gọi lại, các thư viện như Bluebird hoặc Q đã cho phép các lập trình viên dọn sạch cú pháp của họ và viết mã hoạt động không đồng bộ nhưng có vẻ đồng bộ. Điều này dẫn đến mã dễ đọc hơn và chạy nhanh hơn

Ảnh của Aleks Shineleva

Với một lời hứa, thay vì gộp tất cả các phần phụ thuộc vào một khối mã và gửi toàn bộ nội dung đó tới trình duyệt, chúng tôi có thể tách chúng ra

Chúng tôi có thể gửi cuộc gọi lại không đồng bộ (Chức năng C) tới trình duyệt và sử dụng

Strings are same
7 để giữ tất cả các phụ thuộc khác (E, F và G) sang một bên, chỉ chạy chúng khi Hàm C quay lại và chạy

Điều này cho phép chúng tôi viết mã theo cách mô-đun dễ đọc hơn, trong khi vẫn đạt được những lợi ích của lập trình không đồng bộ

Không đồng bộ/Đang chờ

Những lời hứa thật tuyệt vời — thực tế là tuyệt vời đến mức ES6 đã đưa chúng vào ngôn ngữ như một tiêu chuẩn. Nhưng việc sử dụng các lời hứa vẫn khiến mã không đồng bộ có cảm giác hơi khó chịu, vì vậy giờ đây chúng tôi có Async/Await tuyệt đẹp và tuyệt đẹp để giúp chúng tôi giải quyết

Có toàn bộ bài đăng trên blog và (tôi chắc chắn) sách viết về Async/Await, vì vậy tôi sẽ không đi sâu vào vấn đề này, nhưng đủ để nói rằng Async/Await cho phép bạn

  • Tiếp tục sử dụng lời hứa
  • Viết mã không đồng bộ trông và cảm thấy đồng bộ
  • Dọn dẹp cú pháp của bạn và làm cho mã của bạn dễ đọc hơn

Đây là một số bài đăng trên blog và video yêu thích của tôi trên Async/Await, nếu bạn đang muốn đọc thêm

Lời hứa JavaScript có không đồng bộ không?

Sử dụng lời hứa, chúng tôi có thể viết các chương trình không đồng bộ theo cách dễ quản lý hơn . Sử dụng cú pháp Async/Await, mã không đồng bộ dựa trên lời hứa có thể được viết ở định dạng đồng bộ giúp tiết kiệm rất nhiều thời gian và mã có thể mở rộng được. JavaScript thực thi mã trong một luồng duy nhất, điều này khiến mã bị chặn.

JavaScript là đồng bộ hay đồng bộ?

JavaScript đồng bộ . về cơ bản, JavaScript là một ngôn ngữ đơn luồng, chặn, đồng bộ. Điều đó chỉ có nghĩa là tại một thời điểm chỉ có một hoạt động có thể được tiến hành. Đó không phải là toàn bộ câu chuyện, mặc dù.

Lời hứa có luôn không đồng bộ không?

25. 5. 4 Lời hứa luôn không đồng bộ . 2. 4) cho phương thức then(). onFulfills hoặc onRejected không được gọi cho đến khi ngăn xếp ngữ cảnh thực thi chỉ chứa mã nền tảng.

Lời hứa có được giải quyết đồng bộ không?

Ngay cả khi gọi hàm giải quyết trong trình thực thi lời hứa là đồng bộ , nó sẽ thay đổi trạng thái lời hứa ngay lập tức.